嵌套对象的远程 ViewModel 验证不起作用

2023-11-22

我有一个类用户,如下所示:

public class User
{
    public int UserId { get; set; }

    [Required(ErrorMessage = "A username is required.")]
    [StringLength(20, ErrorMessage = "Your username must be 4-20 characters.", MinimumLength = 4)]
    [RegularExpression("^[a-zA-Z0-9]*$", ErrorMessage = "Your username can only consist of letters and numbers.")]
    [Remote("UsernameExists", "RemoteValidation", ErrorMessage = "Username is already taken")]
    public string Username { get; set; }

    [Required(ErrorMessage = "A password is required.")]
    [MinLength(4, ErrorMessage = "Your password must have at least 4 letters.")]
    public string Password { get; set; }

    [Required(ErrorMessage = "An email address is required.")]
    public string Email { get; set; }
}

对于注册功能,我创建了一个 ViewModel,其中包含一个 User 对象和一个用于密码确认的字符串:

public class RegistrationViewModel
{
    public User User { get; set; }

    [DisplayName("Password confirmation")]
    [Required, Compare("User.Password", ErrorMessage = "The password do not match")]
    public string PasswordConfirmation { get; set; }
}

我遇到的第一个问题是,我似乎无法对 Compare("User.Password") 进行验证,因为它似乎找不到用户的属性。有什么方法可以根据 User.Password 属性验证 PasswordConfirmation 属性吗?

第二个问题是用户名字段的远程验证。我遵循了 David Hayden 的教程http://davidhayden.com/blog/dave/archive/2011/01/04/ASPNETMVC3RemoteValidationTutorial.aspx但UsernameExists方法中的参数username始终为null。我在这里错过了什么吗?

Edit:

抱歉,我实际上对密码比较收到的错误还不够清楚。填写字段时它工作正常,如果密码不匹配,我将收到错误。但是,在提交表单时,我在验证摘要中收到以下错误:找不到名为 UserToRegister.Password 的属性。

Edit 2:

感谢乔的帖子,我已经解决了部分问题。远程验证器发回 URL/?UserToRegister.Username=temp ,这显然与我的控制器操作的用户名参数不匹配。为了将我的操作参数映射到 UserToRegister.Username,需要以下内容:

public ActionResult UsernameExists([Bind(Prefix = "UserToRegister.Username")]string username)

现在,这可以正确地将参数传递给该方法。但是,在密码字段上使用“比较”属性时,我仍然收到错误。

Thanks.


针对 User.Password 属性验证 PasswordConfigurmation 属性的问题是由“jquery.validate.unobtrusive.js”文件中的错误引起的。

最初,jquery 'equalTo' 函数是:

adapters.add("equalto", ["other"], function (options) {
var prefix = getModelPrefix(options.element.name),
other = options.params.other,
fullOtherName = appendModelPrefix(other, prefix),
element = $(options.form).find(":input[name=" + fullOtherName + "]")[0];

setValidationValues(options, "equalTo", element);
});

你只需要修改这一行:

element = $(options.form).find(":input[name=" + fullOtherName + "]")[0];

to:

element = $(options.form).find(":input[name='" + fullOtherName + "']")[0];

请注意“fullOtherName”选择器周围添加的单引号。进行此更改后,客户端验证将按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌套对象的远程 ViewModel 验证不起作用 的相关文章

随机推荐

  • SCRIPT5022:已达到 10 次 $digest() 迭代。流产!并重定向到index.html

    Problem 我正在尝试在引导模式窗格中加载 Angular JS 应用程序 但它在 Internet Explorer 上显示奇怪的行为 我们已在 IE9 和 8 上对其进行了测试 我们发现出现以下错误 JSON 未定义 对象错误未定义
  • 如何将网络中的图形加载到 PyTorch 几何图形并设置节点特征和标签?

    Goal 我正在尝试导入图表FROMnetworkx 到 PyTorch 几何和设置标签和节点特征 这是Python中的 问题 我该如何做到这一点 从networkx到PyTorch几何的转换 大概通过使用from networkx功能 如
  • 访问类别中的私有变量会导致链接器错误

    编辑 我不会这样做 我现在意识到这有多么危险 但是 这个问题仍然纯粹出于学术目的 我正在尝试在 NSCollectionView 上实现一个类别 该类别将允许我访问私有变量 displayedItems 我需要能够在我的子类中访问它 因此
  • 未捕获的引用错误:$未定义(ajax)

    我在一个简单的 jsp 上遇到此错误 未捕获的引用错误 未定义 我只是试图回忆一下 Eclipse 上另一个项目的服务休息 但它似乎不起作用 代码在这里
  • HttpUrlConnection 带进度条的分段文件上传

    我想通过以下方式检查上传文件的进度HttpUrlConnection 我怎样才能做到这一点 我尝试在写入数据时计算字节OutputStream但这是错误的 因为只有当我打电话时才会真正上传conn getInputStream 所以我需要以
  • 用悬停而不是点击触发 fancybox?

    我试图在鼠标悬停在链接上时触发 fancybox 但没有运气 有什么建议吗 document ready function This is basic uses default settings a inline fancybox hide
  • 使用 alpha 透明度从 0 到 1 绘制透明渐变

    我在 Android 中有一个动态生成的位图 我想从顶部边缘开始羽化 这样边界区域在顶部完全透明 并逐渐在下面稍微变为完全不透明 创建均匀的完全透明的顶部边缘 transparentPaint new Paint Paint ANTI AL
  • 自定义 Bootstrap 4 的网格系统断点

    我有一个应用程序 其中设计需要分别从台式机到平板电脑或 xl 到 lg 的 1280 个断点 然而 Bootstrap 本身在 1200 处有 xl 断点 我需要全局更改 xl 断点以进行引导 我必须从源文件重新编译 Bootstrap 4
  • 如何从 git diff --no-index 中排除文件和目录

    如何排除文件和目录git diff no index 例如 我想显示两个目录之间的差异project1 project2而忽略了他们的高层 git目录 project1 git project2 git 和他们所有的 DS Store fi
  • 使用 BoneCP:处理来自池的连接

    我刚刚开始使用 BoneCP 这是我第一次使用连接池 我对应该如何使用它有点困惑 目前我将 BoneCP 对象保存为静态变量 因此我可以在不同的连接之间使用它 当我完成连接后 我将其关闭connection close 我应该这样做 还是不
  • 为什么每个公共类都在单独的文件中?

    我最近开始学习Java 发现很奇怪 每个Java公共类都必须在单独的文件中声明 我是一名 C 程序员 C 不强制执行任何此类限制 Java为什么要这样做呢 有没有什么设计考虑 编辑 基于一些答案 为什么 Java 在 IDE 时代还不取消这
  • urllib2 python(传输编码:分块)

    我使用以下 python 代码来下载 html 页面 response urllib2 urlopen current URL msg response read print msg 对于诸如以下的页面this one 它打开 url 时没
  • 类和数据类型有什么区别

    当我通读 UML 规范时发现 class has a set of attributes operations and data type has a set of attributes operations 1 关于数据类型的属性 操作
  • 如何在触摸屏幕(搜索栏)时隐藏键盘

    当我单击 搜索 或单击 取消 时 键盘会隐藏 但我还希望当我单击屏幕上的某个位置时键盘会隐藏 我找到了几个关于文本字段的教程 但我们正在使用搜索栏 有人可以告诉我该怎么做吗 Thanks Try This 在你的 h 文件中添加 UISea
  • 单击选择框上的触发器在 jQuery 中不起作用

    如何使用触发器打开下拉列表 这是不起作用的代码 select trigger click 请注意 mousedown 和 mouseup 也不起作用 select children option each function if this
  • 禁用 firefox 另存为dialog-selenium

    我正在使用 selenium 进行网页抓取 每当我尝试下载文件时 即使我申请 也会弹出 Firefox 下载 另存为文件的情况profile set preference browser helperApps neverAsk saveTo
  • 如何在Android中启用USB调试?

    如何在 Nexus 7 第一代 中启用 USB 调试 编辑 接受的答案也适用于隐藏开发人员选项的其他 Android 设备 在 设置 的 开发者选项 区域中打开 USB 调试 如果您没有看到 开发人员选项 请进入 设置 中的 关于设备 然后
  • Laravel 5.8 全局设置区域设置

    我有一条路线 Route get setlocale locale function locale App setLocale locale return back gt name setlocale 当我去 example com set
  • CXF 客户端代理线程安全吗?

    我正在使用 CXF 生成 SOAP 客户端类 在里面CXF 文档 他们写 JAX WS 客户端代理线程安全吗 JAX WS 官方答案 不 根据 JAX WS 规范 客户端代理不是线程安全的 要编写可移植代码 您应该将它们视为非线程安全并同步
  • 嵌套对象的远程 ViewModel 验证不起作用

    我有一个类用户 如下所示 public class User public int UserId get set Required ErrorMessage A username is required StringLength 20 Er