Asp.net MVC3比较属性:与嵌套属性比较时出错
问题描述:
使用MVC3比较属性和嵌套属性时出现错误。Asp.net MVC3比较属性:与嵌套属性比较时出错
示例代码如下:
模型和视图模型:
public class Data
{
public string Input { get; set; }
}
public class DataVM
{
public Data Data { get; set; }
[Compare("Data.Input")]
public string ConfirmInput { get; set; }
}
控制器:
public ActionResult Data() {
return View(new DataVM());
}
[HttpPost]
public ActionResult Data(FormCollection fc) {
DataVM vm = new DataVM();
TryUpdateModel(vm, fc);
if (ModelState.IsValid){
return Content("Success!!!");
}
return View(vm);
}
查看:
@model myth.Models.ViewModels.DataVM
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@Html.EditorFor(m => m.Data.Input)
@Html.ValidationMessageFor(m => m.Data.Input)
<br />
@Html.EditorFor(m => m.ConfirmInput)
@Html.ValidationMessageFor(m => m.ConfirmInput)
<br />
<input type="submit" value="Save" />
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
如果我使用[对比( “输入”)],客户端验证失败。 如果我使用[比较(“Data.Input”)],客户端验证工作,但服务器端失败。 在课堂CompareAttribute.cs,方法
protected override ValidationResult IsValid(...) { .. },
未能找到Data.Input物业。
使用Compare for Nested Property比较的正确方法是什么?
答
更改您的视图模型和稍后映射到实体:
public class DataVM
{
public string Input { get; set; }
[Compare("Input")]
public string ConfirmInput { get; set; }
}
感谢您的答复。我正在做你在生产中建议的内容,但想知道如何使用比较和嵌套属性。背后的原因是在多个视图模型中使用相同的数据模型,并且在数据模型上使用的验证规则需要复制到所有视图模型中,这是我们都希望避免的。如果在当前mvc发行版中不可行,那么需要为将来的发行版更新compare属性的代码以适应嵌套属性验证。 – 2011-09-08 15:55:18