asp.net-mvc – 当参数名称需要不同时,如何重用远程验证方法?
我有两个类,我用作两个不同视图的模型.您可以看到第二个类包含第一个类的实例.第一个包含远程验证属性.
[MetadataType( typeof( ExceptionLogModel.EmailRecipientMetadata ) )] public class EmailRecipientViewModel { public int EmailRecipientID { get; set; } [Remote( "ValidateEmailRecipientNameUniqueness","EmailRecipient",ErrorMessage = "Name is not unique." )] public string Name { get; set; } [Remote( "ValidateEmailRecipientEmailUniqueness",ErrorMessage = "Email is not unique." )] public string Email { get; set; } } public class EmailRecipientChoices { public List<EmailRecipient> UnselectedEmailRecipients { get; set; } public List<EmailRecipient> SelectedEmailRecipients { get; set; } public EmailRecipientViewModel EmailRecipient { get; set; } } 当这些验证在浏览器中触发时,将根据视图使用的类生成两个不同的请求.您可以看到查询字符串参数名称不同: http://localhost:55327/EmailRecipient/ValidateEmailRecipientNameUniqueness?Name=sdhsdgh http://localhost:55327/EmailRecipient/ValidateEmailRecipientNameUniqueness?EmailRecipient.Name=sdhsdgh 以下是我的操作方法的当前版本,它不适用于第二个URL: public JsonResult ValidateEmailRecipientNameUniqueness( string name ) { var isValid = !_emailRecipientRepo.NameExists( name ); return Json( isValid,JsonRequestBehavior.AllowGet ); } 使用第二个URL时,name参数将为null.我已经读过我应该能够为该参数添加一个Bind属性并添加一个前缀,但这也不起作用.我甚至尝试将前缀设置为EmailRecipient.以防它需要点.为了以防万一,我还在名字中用大写N试了一下.不行.添加它也会破坏其他URL! public JsonResult ValidateEmailRecipientNameUniqueness( [Bind( Prefix = "EmailRecipient")] string name ) 可能的解决方案 我可以让方法获取EmailRecipientViewModel的实例并为其创建一个IModelBinder,我可以在其中查找命名约定并将其分配给实例.这看起来比应该做的更多. 我可以使用@ Html.EditorFor()的重载并告诉它对htmlFieldName使用“Name”,并且还使用@ Html.ValidationMessage(“Name”)而不是ValidationMessageFor.唯一的缺点是潜在的命名冲突,但这并不是什么大不了的事.我只需要为所使用的类的所有实例使用唯一的名称.更新:实际上,如果我这样做,因为我更改了名称,因此在发布表单时会出现问题.那不好. … 我只是想通了我可以让方法不带参数,并手动访问查询字符串.这是一个非常简单的解决方案,但我没有得到好的参数. string name = Request.QueryString[ "Name" ] ?? Request.QueryString[ "EmailRecipient.Name" ]; 这很容易,我可能只是想用它.但是,既然我已经打开了这个问题,我会问,是否有更优雅的解决方案? 解决方法
如果不滚动自己的验证或模型绑定器,就没有一种干净的方法可以做到这一点.可以把它想象成模型绑定,模型绑定器需要知道输入内容的名称,远程验证也是如此.您可以采取的一种方法是在控制器中创建两个单独的远程验证方法,最终调用实际执行所有验证工作的一个方法.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – IIS – 无法通过ip地址而不是本地主机访问页面
- ASP.NET Core / MVC 6 ViewModel中的依赖注入(DI)
- asp.net – 有一个ClientScriptManager.RegisterClientScri
- asp.net-mvc – 由于已知在Cross Site Scripting攻击中使用
- asp.net Gridview,1记录跨度两行
- asp.net-mvc – ScriptBundle中的{version}是什么(“?/ scr
- asp.net-mvc-3 – mvc3 jquery unobtrusive验证语言环境十进
- asp.net-core – Asp.Net核心Web应用程序:使用IExceptionF
- 24.集成ASP.NETCore Identity
- asp.net – html脚本标签不使用类型javascript?
- 经验丰富的Asp.net程序员在进入PHP时应该知道什么
- asp.net-core – 为什么默认的mvc6模板针对多个D
- asp.net-core – project.json版本控制格式
- asp.net-mvc – mvc 4 MultiSelect列表和EF多对多
- asp.net – 单独的应用程序服务器和数据库服务器
- asp.net – SmtpException:服务器不支持安全连接
- asp.net – 构建我的第一个ASP应用程序
- asp.net-mvc – 在应用程序池回收后,如何预热我的
- asp.net在页面之间传递类的实例
- asp.net – 为什么Request.IsSecureConnection返