создать requridif атрибут, как описано в http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspxGetFullHtmlFieldId для пользовательских requiredif валидатор для пользовательского объекта недвижимости
У меня есть классы, как это:
public class MainClass
{
public string Title { get; set; }
public SubClass Additional { get; set; }
}
public class SubClass
{
[RequiredIf("Field1NotExists", false, ErrorMessage = "field 1 is required")]
public string Field1 { get; set; }
public bool Field1NotExists { get; set; }
}
Когда в виду я использую EditorFor:
@Html .EditorFor (m => m.Additional.Field1) @ Html.EditorFor (m => m.Additional.Field1NotExists)
ненавязчивая работа с клиентами проверки на стороне правильно
Но когда я использую TextBoxFor и CheckBoxFor
@Html.TextBoxFor(m => m.Additional.Field1)
@Html.CheckBoxFor(m => m.Additional.Field1NotExists)
ненавязчивый проверки на стороне клиента не работает
Часть атрибута requiredif:
private string BuildDependentPropertyId(ModelMetadata metadata, ViewContext viewContext)
{
string depProp = viewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(this.DependentProperty);
var thisField = metadata.PropertyName + "_";
if (depProp.StartsWith(thisField))
depProp = depProp.Substring(thisField.Length);
else
{
var thisFieldInMiddle = "_" + metadata.PropertyName + "_";
if (!this.DependentProperty.Contains(thisFieldInMiddle))
depProp = depProp.Replace(thisFieldInMiddle, "_");
}
return depProp;
}
Когда Я использую EditorFor ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId (this.DependentProperty) возвращает полный id (Additional_Field1_Field1NotExists)
И когда я использую TExtBoxFor ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId (this.DependentProperty) возвращение только лас имя поля (Field1NotExists вместо Additional_Field1NotExists)
Почему ViewContext отличается в этих двух способов? И как я могу получить полный идентификатор поля, когда я использую TextBoxFor?
Извините за плохой английский