Вот ситуация, у меня есть список из примерно 20 свойств (называемых атрибутами), которые я определил в своей базе данных.Он состоит из имени, возможных значений, необязательного регулярного выражения, логического значения, которое указывает, что поле является обязательным, и т. Д.
В моей ViewModel я получаю список атрибутов, и в моем представлении в виде списка у меня есть хороший EditorTemplateдля AttributeViewModel, чтобы показать их, используя крутой BeginCollectionItem Стива Сандерсона , чтобы убедиться, что сообщение привязано к списку AttributeViewModel (это работает просто отлично).
Мой AttributeViewModel выглядит следующим образом:
public class AttributeViewModel
{
public string Description { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
public string SelectedValue { get; set; }
public byte RenderAs { get; set; }
public int AttributeID { get; set; }
public int ID { get; set; }
public int RegexValidation { get; set; }
public bool IsRequired { get; set; }
}
Мой вид выглядит следующим образом (edit.cshtml):
@model Company.Services.ViewModels.StaffMemberViewModel
<h2>Edit</h2>
@using (Html.BeginForm())
{
Some fields here, nothing of interest.
@Html.EditorFor(model => model.AttributeValues)
<input type="submit" value="Send" />
}
Вот интересный момент, это мой EditorTemplate для AttributeValues:
@using Company.Web.Helpers // This is where "BeginCollectionItem" lives
@model Company.Services.ViewModels.AttributeViewModel
using (Html.BeginCollectionItem("attributes"))
{
<div class="editor-label">
@Model.Description
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.SelectedValue, new SelectList(Model.Values, "Value", "Text"), "-- Select --")
@Html.HiddenFor(model => model.AttributeID)
</div>
}
ЧтоЯ хотел бы сделать, это использовать IsRequired и RegexValidation, чтобы убедиться, что SelectedValue для каждого атрибута является действительным.Как бы я поступил так?Если возможно, я бы действительно хотел воспользоваться преимуществами инфраструктуры валидации MVC3 и ненавязчивой валидации, как я «обычно» сделал бы.
Я, очевидно, не могу динамически добавить RequiredAttribute или RegularExpressionAttribute, поскольку они различаются для каждого измои атрибуты объектов в списке.