Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery不引人注目的验证不处理视图模型列表中第一个之后的项-c MVC 4_Javascript_C#_Jquery_Asp.net Mvc_Unobtrusive Validation - Fatal编程技术网

Javascript Jquery不引人注目的验证不处理视图模型列表中第一个之后的项-c MVC 4

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; }

所以基本上我有一个表单,它有多个部分,其中包含一些用户数据。用户可以选择他们想要提交的部分。每个部分都有一个复选框来表示这一点。问题出现在html被呈现并且不引人注目的解析器已经运行之后。它只使用客户端验证所需的必要数据属性填充第一部分的输入元素。我在下面包含了一些精简的代码

型号:

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;im.LocationList[i].FirstName….}因此,控件使用索引器正确命名,或者使用EditorTemplate作为EnrollmentLocationTypeOf,但不确定用户是否可以选择要发回的节他们都会发回,除非你有一些javascript来禁用和重命名所有的controlsSorry,也许这有点不清楚。它们都将被发回,但是任何没有选中EnrollLocation复选框的部分都将被忽略,因此我不需要担心UI上的验证。然而,正常的for循环似乎已经解决了这个问题,所以感谢您的帮助。
@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++;
}
}