Javascript Jquery不引人注目的验证不处理视图模型列表中第一个之后的项-c MVC 4
所以基本上我有一个表单,它有多个部分,其中包含一些用户数据。用户可以选择他们想要提交的部分。每个部分都有一个复选框来表示这一点。问题出现在html被呈现并且不引人注目的解析器已经运行之后。它只使用客户端验证所需的必要数据属性填充第一部分的输入元素。我在下面包含了一些精简的代码 型号:Javascript Jquery不引人注目的验证不处理视图模型列表中第一个之后的项-c MVC 4,javascript,c#,jquery,asp.net-mvc,unobtrusive-validation,Javascript,C#,Jquery,Asp.net Mvc,Unobtrusive Validation,所以基本上我有一个表单,它有多个部分,其中包含一些用户数据。用户可以选择他们想要提交的部分。每个部分都有一个复选框来表示这一点。问题出现在html被呈现并且不引人注目的解析器已经运行之后。它只使用客户端验证所需的必要数据属性填充第一部分的输入元素。我在下面包含了一些精简的代码 型号: public class EnrollmentFormViewModel { public List<EnrollmentLocation> LocationList { get; set; }
public class EnrollmentFormViewModel
{
public List<EnrollmentLocation> LocationList { get; set; }
public EnrollmentFormViewModel()
{
LocationList = new List<EnrollmentLocation>();
}
public class EnrollmentLocation
{
[DisplayName("Enroll Location")]
public bool EnrollLocation { get; set; }
[Required(ErrorMessage = "Please enter your first name")]
[DisplayName("First Name")]
public string FirstName { get; set; }
public EnrollmentLocation()
{
EnrollLocation = true;
TStatList = new List<SelectListItem>();
}
}
视图:
正如我前面所说,这正确地填充了字段,第一部分看起来很好。以下是一个输入元素的示例:
<input name="0FirstName" class="text_field valid" data-val="true"
data-val-required="Please enter your first name"
id="FirstName" type="text" value="nothing">
但是,任何后续的ITME都是这样的:
<input name="1FirstName" class="text_field valid" id="FirstName"
type="text" value="nothing">
我在其他帖子中尝试了一些不同的东西,但没有任何效果。有人有什么建议吗 看起来您需要使用for循环而不是foreach来迭代该列表
@for(int i = 0; i < Model.LocationList.Count(); i++)
{
<div class="location form_new_row panel panel-primary">
<div id="info" class="form_half_width form_new_row">
<div id="first-name" class="q form_question form_half_width form_new_row">
@Html.LabelFor(m => Model.LocationList[i].FirstName, new { @class = "label-asterisk form_question_label" })
<div class="form_question_answer">
@Html.TextBoxFor(m => Model.LocationList[i].FirstName, new { @class = "text_field", Name = count + "FirstName" })
</div>
@Html.ValidationMessageFor(m => Model.LocationList[i].FirstName)
</div>
</div>
<div class="user-info form_half_width">
<div>@Html.CheckBoxFor(m => Model.LocationList[i].EnrollLocation)@Html.LabelFor(m => Model.LocationList[i].EnrollLocation, new { @class = "form_question_label" })</div>
</div>
</div>
{
count++;
}
}
这将为每个位置上的每个属性生成唯一的id值。
例如,LocationList[0]。FirstName将是第一个元素的id,而LocationList[1]。FirstName将是第二个元素的名称。您正在重写name属性!无论如何,它都不会正确地发回。在for循环中构造html或使用编辑器模板,以便名称正确且可以匹配upI已切换名称,以尝试使验证消息div查看正确的输入元素。但是,删除名称重载似乎并不能解决我这方面的问题。如果您只是删除了覆盖名称属性的尝试,那么您将生成更多无效的html和重复的名称属性。您需要一个for循环,例如forint i=0;i
@for(int i = 0; i < Model.LocationList.Count(); i++)
{
<div class="location form_new_row panel panel-primary">
<div id="info" class="form_half_width form_new_row">
<div id="first-name" class="q form_question form_half_width form_new_row">
@Html.LabelFor(m => Model.LocationList[i].FirstName, new { @class = "label-asterisk form_question_label" })
<div class="form_question_answer">
@Html.TextBoxFor(m => Model.LocationList[i].FirstName, new { @class = "text_field", Name = count + "FirstName" })
</div>
@Html.ValidationMessageFor(m => Model.LocationList[i].FirstName)
</div>
</div>
<div class="user-info form_half_width">
<div>@Html.CheckBoxFor(m => Model.LocationList[i].EnrollLocation)@Html.LabelFor(m => Model.LocationList[i].EnrollLocation, new { @class = "form_question_label" })</div>
</div>
</div>
{
count++;
}
}