【发布时间】:2012-07-18 18:09:33
【问题描述】:
我有两个视图模型,一个聚合另一个集合:
class Parent
{
public string Key { get; set; }
public IList<Child> Children { get; set; }
}
class Child
{
public string Key { get; set; }
[Required, Remote("VerifyNameUnique", "Parent", AdditionalFields = "Key", ErrorMessage = "The name must be unique.")]
public string Name { get; set; }
}
我有一个控制器动作
public ActionResult VerifyNameUnique(string key, string name)
{
var result = // ... verify uniqueness
return Json(result, JsonRequestBehavior.AllowGet);
}
还有一个观点:
@model Parent
@Html.HiddenFor(m => m.Key)
@for(var i=0; i<Model.Children; i++)
{
@Html.HiddenFor (m => m.Children[i].Key)
@Html.LabelFor(m => m.Children[i].Name)
@Html.EditorFor (m => m.Children[i].Name)
}
当我的父/子编辑器模板调用操作来验证任何名称字段时,它会发送一个查询字符串?Children[0].Key=abc&Children[0].Name=Fred,其中0 是刚刚编辑的子的索引i。
由于前缀,它不会绑定到VerifyNameUnique 的参数。我尝试使用带有前缀集的BindAttribute,但前缀因i 的值而异。
编写自定义模型绑定器是一种选择,但现在对于这个简单的场景来说似乎有点过头了。有什么更好的我可以做的吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc-3 validation data-annotations