C# GetFullHtmlFieldDid用于自定义要求自定义对象属性的验证程序
我按照中所述创建Requiridif属性 我有这样的课程:C# GetFullHtmlFieldDid用于自定义要求自定义对象属性的验证程序,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,我按照中所述创建Requiridif属性 我有这样的课程: public class MainClass { public string Title { get; set; } public SubClass Additional { get; set; } } public class SubClass { [RequiredIf("Field1NotExists", false, ErrorMessage = "field 1 is required")] p
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:
@EditorFor(m=>m.Additional.Field1)
@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;
}
当我为ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldDid(this.DependentProperty)使用EditorFor ViewContext.ViewData.TemplateInfo时,返回完整id(附加的\u字段1\u字段1注释存在)
当我为ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldDid(this.DependentProperty)使用TextBoxforViewContext.ViewData.TemplateInfo时,只返回las字段名(Field1NotExists而不是附加的_Field1NotExists)
为什么ViewContext在这两方面不同?当我使用TextBoxFor时,如何获得完整的字段id
很抱歉,英语不好
TextBoxFor
和其他输入扩展不保留前缀,只有编辑器和显示扩展才保留前缀。如果您检查TemplateInfo.HtmlFieldPrefix
,您将看到它是空的
您还将发现,如果将TextBoxFor用于复杂的ViewModels,则由于这个原因,在提交时无法正确绑定数据。使用编辑器模板的另一个原因