У меня есть две модели представления, одна из которых объединяет коллекцию другой:
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)
}
Когда мой шаблон редактора Parent/Child вызывает действие для проверки любого из полей Name, он отправляет строку запроса ?Children[0].Key=abc&Children[0].Name=Fred
, где 0
— это индекс i
только что отредактированного дочернего элемента.
Это не привязывается к параметрам VerifyNameUnique
из-за префикса. Я пробовал использовать BindAttribute
с набором префиксов, но префикс зависит от значения i
.
Написание пользовательского связывателя модели является вариантом, но сейчас кажется излишним для этого простого сценария. Могу ли я сделать что-нибудь более приятное?