Javascript 将视图表数据绑定到MVC模型

Javascript 将视图表数据绑定到MVC模型,javascript,c#,ajax,asp.net-mvc-3,model-view-controller,Javascript,C#,Ajax,Asp.net Mvc 3,Model View Controller,我正在处理一个现有的项目,有人编写了一个视图,试图将表数据绑定到一个模型列表,但它不起作用,我的技能也不足以找出原因 @* The insert template is only needed when the form is unlocked and therefore editable. *@ @if (Model.IsUnlocked) { <div

我正在处理一个现有的项目,有人编写了一个视图,试图将表数据绑定到一个模型列表,但它不起作用,我的技能也不足以找出原因

                @* The insert template is only needed when the form is unlocked and therefore editable. *@
                @if (Model.IsUnlocked)
                {
                    <div data-type="itemtemplate" class="benefits-row">
                        @if (Model.CanEdit)
                        {
                            <input id="Benefits_{0}__AllowanceId" name="Benefits_[{0}].AllowanceID" type="hidden" value="0"/>
                            <select id="Benefits_{0}__AllowanceTypeId" name="Benefits[{0}].AllowanceTypeID" style="width: 220px">
                                @foreach (var allowance in Model.AllowanceTypesBenefits)
                                {
                                    <option value="@allowance.Value">@allowance.Text</option>
                                }
                            </select>
                            <input id="Benefits_{0}__AllowanceAmount" name="Benefits[{0}].Amount" type="text" value="" style="width: 68px;"/>
                            <input id="Benefits_{0}__ExpiryDate" name="Benefits[{0}].ExpiryDate" type="text" value="" class="datepickerrecurring datepicker" style="width: 80px"/>
                            <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                        }
                        else if (Model.CanView)
                        {
                            <p>@Model.Benefits[0].AllowanceTypeName</p>
                        }
                    </div>
                }
                @if (Model.Benefits != null)
                {
                            @* Do not turn into a foreach. *@
                    for (var i = 0; i < Model.Benefits.Count(); i++)
                    {
                        <div class="benefits-row">
                            @Html.HiddenFor(a => Model.Benefits[i].AllowanceID) @* This somehow magically turns into id="Benefits_0__AllowanceTypeID" name="Benefits[0].AllowanceTypeID", which is why a foreach won't work. *@

                            @if (Model.IsUnlocked)
                            {
                                if (Model.CanEdit)
                                {
                                    @Html.DropDownListFor(a => Model.Benefits[i].AllowanceTypeID, new SelectList(Model.AllowanceTypesBenefits, "Value", "Text", Model.Benefits[i].AllowanceTypeID), new {@style = "width:220px;"}, Model.CanView)
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount)})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].Amount)

                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly"})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].ExpiryDate)
                                    <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                                }
                                else if (Model.CanView)
                                {
                                    <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount), @readonly = "readonly", disabled = "disabled"})
                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})
                                }
                            }
                            else
                            {
                                <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                <input type="text" size="8" value="###" disabled="disabled"/>
                                @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})

                            }
                        </div>
                    }
                }
            </div>
        </fieldset>
下面是我假设的javascript行,用于设置绑定

$("#benefitsTable").bindmvclist();
                @* The insert template is only needed when the form is unlocked and therefore editable. *@
                @if (Model.IsUnlocked)
                {
                    <div data-type="itemtemplate" class="benefits-row">
                        @if (Model.CanEdit)
                        {
                            <input id="Benefits_{0}__AllowanceId" name="Benefits_[{0}].AllowanceID" type="hidden" value="0"/>
                            <select id="Benefits_{0}__AllowanceTypeId" name="Benefits[{0}].AllowanceTypeID" style="width: 220px">
                                @foreach (var allowance in Model.AllowanceTypesBenefits)
                                {
                                    <option value="@allowance.Value">@allowance.Text</option>
                                }
                            </select>
                            <input id="Benefits_{0}__AllowanceAmount" name="Benefits[{0}].Amount" type="text" value="" style="width: 68px;"/>
                            <input id="Benefits_{0}__ExpiryDate" name="Benefits[{0}].ExpiryDate" type="text" value="" class="datepickerrecurring datepicker" style="width: 80px"/>
                            <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                        }
                        else if (Model.CanView)
                        {
                            <p>@Model.Benefits[0].AllowanceTypeName</p>
                        }
                    </div>
                }
                @if (Model.Benefits != null)
                {
                            @* Do not turn into a foreach. *@
                    for (var i = 0; i < Model.Benefits.Count(); i++)
                    {
                        <div class="benefits-row">
                            @Html.HiddenFor(a => Model.Benefits[i].AllowanceID) @* This somehow magically turns into id="Benefits_0__AllowanceTypeID" name="Benefits[0].AllowanceTypeID", which is why a foreach won't work. *@

                            @if (Model.IsUnlocked)
                            {
                                if (Model.CanEdit)
                                {
                                    @Html.DropDownListFor(a => Model.Benefits[i].AllowanceTypeID, new SelectList(Model.AllowanceTypesBenefits, "Value", "Text", Model.Benefits[i].AllowanceTypeID), new {@style = "width:220px;"}, Model.CanView)
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount)})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].Amount)

                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly"})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].ExpiryDate)
                                    <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                                }
                                else if (Model.CanView)
                                {
                                    <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount), @readonly = "readonly", disabled = "disabled"})
                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})
                                }
                            }
                            else
                            {
                                <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                <input type="text" size="8" value="###" disabled="disabled"/>
                                @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})

                            }
                        </div>
                    }
                }
            </div>
        </fieldset>
这是视图中的表

                @* The insert template is only needed when the form is unlocked and therefore editable. *@
                @if (Model.IsUnlocked)
                {
                    <div data-type="itemtemplate" class="benefits-row">
                        @if (Model.CanEdit)
                        {
                            <input id="Benefits_{0}__AllowanceId" name="Benefits_[{0}].AllowanceID" type="hidden" value="0"/>
                            <select id="Benefits_{0}__AllowanceTypeId" name="Benefits[{0}].AllowanceTypeID" style="width: 220px">
                                @foreach (var allowance in Model.AllowanceTypesBenefits)
                                {
                                    <option value="@allowance.Value">@allowance.Text</option>
                                }
                            </select>
                            <input id="Benefits_{0}__AllowanceAmount" name="Benefits[{0}].Amount" type="text" value="" style="width: 68px;"/>
                            <input id="Benefits_{0}__ExpiryDate" name="Benefits[{0}].ExpiryDate" type="text" value="" class="datepickerrecurring datepicker" style="width: 80px"/>
                            <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                        }
                        else if (Model.CanView)
                        {
                            <p>@Model.Benefits[0].AllowanceTypeName</p>
                        }
                    </div>
                }
                @if (Model.Benefits != null)
                {
                            @* Do not turn into a foreach. *@
                    for (var i = 0; i < Model.Benefits.Count(); i++)
                    {
                        <div class="benefits-row">
                            @Html.HiddenFor(a => Model.Benefits[i].AllowanceID) @* This somehow magically turns into id="Benefits_0__AllowanceTypeID" name="Benefits[0].AllowanceTypeID", which is why a foreach won't work. *@

                            @if (Model.IsUnlocked)
                            {
                                if (Model.CanEdit)
                                {
                                    @Html.DropDownListFor(a => Model.Benefits[i].AllowanceTypeID, new SelectList(Model.AllowanceTypesBenefits, "Value", "Text", Model.Benefits[i].AllowanceTypeID), new {@style = "width:220px;"}, Model.CanView)
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount)})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].Amount)

                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly"})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].ExpiryDate)
                                    <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                                }
                                else if (Model.CanView)
                                {
                                    <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount), @readonly = "readonly", disabled = "disabled"})
                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})
                                }
                            }
                            else
                            {
                                <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                <input type="text" size="8" value="###" disabled="disabled"/>
                                @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})

                            }
                        </div>
                    }
                }
            </div>
        </fieldset>
福利类型 数量 到期日

                @* The insert template is only needed when the form is unlocked and therefore editable. *@
                @if (Model.IsUnlocked)
                {
                    <div data-type="itemtemplate" class="benefits-row">
                        @if (Model.CanEdit)
                        {
                            <input id="Benefits_{0}__AllowanceId" name="Benefits_[{0}].AllowanceID" type="hidden" value="0"/>
                            <select id="Benefits_{0}__AllowanceTypeId" name="Benefits[{0}].AllowanceTypeID" style="width: 220px">
                                @foreach (var allowance in Model.AllowanceTypesBenefits)
                                {
                                    <option value="@allowance.Value">@allowance.Text</option>
                                }
                            </select>
                            <input id="Benefits_{0}__AllowanceAmount" name="Benefits[{0}].Amount" type="text" value="" style="width: 68px;"/>
                            <input id="Benefits_{0}__ExpiryDate" name="Benefits[{0}].ExpiryDate" type="text" value="" class="datepickerrecurring datepicker" style="width: 80px"/>
                            <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                        }
                        else if (Model.CanView)
                        {
                            <p>@Model.Benefits[0].AllowanceTypeName</p>
                        }
                    </div>
                }
                @if (Model.Benefits != null)
                {
                            @* Do not turn into a foreach. *@
                    for (var i = 0; i < Model.Benefits.Count(); i++)
                    {
                        <div class="benefits-row">
                            @Html.HiddenFor(a => Model.Benefits[i].AllowanceID) @* This somehow magically turns into id="Benefits_0__AllowanceTypeID" name="Benefits[0].AllowanceTypeID", which is why a foreach won't work. *@

                            @if (Model.IsUnlocked)
                            {
                                if (Model.CanEdit)
                                {
                                    @Html.DropDownListFor(a => Model.Benefits[i].AllowanceTypeID, new SelectList(Model.AllowanceTypesBenefits, "Value", "Text", Model.Benefits[i].AllowanceTypeID), new {@style = "width:220px;"}, Model.CanView)
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount)})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].Amount)

                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly"})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].ExpiryDate)
                                    <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                                }
                                else if (Model.CanView)
                                {
                                    <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount), @readonly = "readonly", disabled = "disabled"})
                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})
                                }
                            }
                            else
                            {
                                <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                <input type="text" size="8" value="###" disabled="disabled"/>
                                @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})

                            }
                        </div>
                    }
                }
            </div>
        </fieldset>
@*只有在表单解锁并可编辑时才需要插入模板*@
@如果(Model.IsUnlocked)
{
@if(Model.CanEdit)
{
@foreach(模型中的var备抵。AllowanceTypesBenefits)
{
@津贴.文本
}
}
else if(Model.CanView)
{
@Model.Benefits[0]。AllowanceTypeName

                @* The insert template is only needed when the form is unlocked and therefore editable. *@
                @if (Model.IsUnlocked)
                {
                    <div data-type="itemtemplate" class="benefits-row">
                        @if (Model.CanEdit)
                        {
                            <input id="Benefits_{0}__AllowanceId" name="Benefits_[{0}].AllowanceID" type="hidden" value="0"/>
                            <select id="Benefits_{0}__AllowanceTypeId" name="Benefits[{0}].AllowanceTypeID" style="width: 220px">
                                @foreach (var allowance in Model.AllowanceTypesBenefits)
                                {
                                    <option value="@allowance.Value">@allowance.Text</option>
                                }
                            </select>
                            <input id="Benefits_{0}__AllowanceAmount" name="Benefits[{0}].Amount" type="text" value="" style="width: 68px;"/>
                            <input id="Benefits_{0}__ExpiryDate" name="Benefits[{0}].ExpiryDate" type="text" value="" class="datepickerrecurring datepicker" style="width: 80px"/>
                            <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                        }
                        else if (Model.CanView)
                        {
                            <p>@Model.Benefits[0].AllowanceTypeName</p>
                        }
                    </div>
                }
                @if (Model.Benefits != null)
                {
                            @* Do not turn into a foreach. *@
                    for (var i = 0; i < Model.Benefits.Count(); i++)
                    {
                        <div class="benefits-row">
                            @Html.HiddenFor(a => Model.Benefits[i].AllowanceID) @* This somehow magically turns into id="Benefits_0__AllowanceTypeID" name="Benefits[0].AllowanceTypeID", which is why a foreach won't work. *@

                            @if (Model.IsUnlocked)
                            {
                                if (Model.CanEdit)
                                {
                                    @Html.DropDownListFor(a => Model.Benefits[i].AllowanceTypeID, new SelectList(Model.AllowanceTypesBenefits, "Value", "Text", Model.Benefits[i].AllowanceTypeID), new {@style = "width:220px;"}, Model.CanView)
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount)})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].Amount)

                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly"})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].ExpiryDate)
                                    <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                                }
                                else if (Model.CanView)
                                {
                                    <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount), @readonly = "readonly", disabled = "disabled"})
                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})
                                }
                            }
                            else
                            {
                                <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                <input type="text" size="8" value="###" disabled="disabled"/>
                                @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})

                            }
                        </div>
                    }
                }
            </div>
        </fieldset>
} } @如果(Model.Benefits!=null) { @*不要变成一辆马车*@ 对于(var i=0;iModel.Benefits[i].AllowanceID)@*这会神奇地变成id=“Benefits\u 0\u AllowanceTypeID”name=“Benefits[0].AllowanceTypeID”,这就是foreach无法工作的原因*@ @如果(Model.IsUnlocked) { if(Model.CanEdit) { @Html.DropDownListFor(a=>Model.Benefits[i].AllowanceTypeID,新选择列表(Model.AllowanceTypesBenefits,“Value”,“Text”,Model.Benefits[i].AllowanceTypeID),新{@style=“width:220px;”,Model.CanView) @Html.TextBoxFor(a=>Model.Benefits[i].Amount,Model.CanView,新的{maxlength=“100”,size=“8”,Value=String.Format(“{0:0.00}”,Model.Benefits[i].Amount)}) @Html.ValidationMessageFor(m=>Model.Benefits[i].Amount) @Html.TextBoxFor(a=>Model.Benefits[i].ExpiryDate,新的{@class=“datepicker”,@style=“width:80px;”,Value=String.Format({0:d/MM/yyyyy}),Model.Benefits[i].ExpiryDate,@readonly=“readonly”}) @Html.ValidationMessageFor(m=>Model.Benefits[i].ExpiryDate) } else if(Model.CanView) { @Model.Benefits[i].AllowanceTypeName @Html.TextBoxFor(a=>Model.Benefits[i].Amount,Model.CanView,新的{maxlength=“100”,size=“8”,Value=String.Format(“{0:0.00}”,Model.Benefits[i].Amount),@readonly=“readonly”,disabled=“disabled”}) @Html.TextBoxFor(a=>Model.Benefits[i].ExpiryDate,新{@style=“width:80px;”,Value=String.Format(“{0:d/MM/yyyy}”,Model.Benefits[i].ExpiryDate),@readonly=“readonly”,disabled=“disabled”}) } } 其他的 { @Model.Benefits[i].AllowanceTypeName @Html.TextBoxFor(a=>Model.Benefits[i].ExpiryDate,新的{@class=“datepicker”,@style=“width:80px;”,Value=String.Format({0:d/MM/yyyyy}),Model.Benefits[i].ExpiryDate,@readonly=“readonly”,disabled=“disabled”}) } } }
任何帮助/指导都将不胜感激:)

                @* The insert template is only needed when the form is unlocked and therefore editable. *@
                @if (Model.IsUnlocked)
                {
                    <div data-type="itemtemplate" class="benefits-row">
                        @if (Model.CanEdit)
                        {
                            <input id="Benefits_{0}__AllowanceId" name="Benefits_[{0}].AllowanceID" type="hidden" value="0"/>
                            <select id="Benefits_{0}__AllowanceTypeId" name="Benefits[{0}].AllowanceTypeID" style="width: 220px">
                                @foreach (var allowance in Model.AllowanceTypesBenefits)
                                {
                                    <option value="@allowance.Value">@allowance.Text</option>
                                }
                            </select>
                            <input id="Benefits_{0}__AllowanceAmount" name="Benefits[{0}].Amount" type="text" value="" style="width: 68px;"/>
                            <input id="Benefits_{0}__ExpiryDate" name="Benefits[{0}].ExpiryDate" type="text" value="" class="datepickerrecurring datepicker" style="width: 80px"/>
                            <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                        }
                        else if (Model.CanView)
                        {
                            <p>@Model.Benefits[0].AllowanceTypeName</p>
                        }
                    </div>
                }
                @if (Model.Benefits != null)
                {
                            @* Do not turn into a foreach. *@
                    for (var i = 0; i < Model.Benefits.Count(); i++)
                    {
                        <div class="benefits-row">
                            @Html.HiddenFor(a => Model.Benefits[i].AllowanceID) @* This somehow magically turns into id="Benefits_0__AllowanceTypeID" name="Benefits[0].AllowanceTypeID", which is why a foreach won't work. *@

                            @if (Model.IsUnlocked)
                            {
                                if (Model.CanEdit)
                                {
                                    @Html.DropDownListFor(a => Model.Benefits[i].AllowanceTypeID, new SelectList(Model.AllowanceTypesBenefits, "Value", "Text", Model.Benefits[i].AllowanceTypeID), new {@style = "width:220px;"}, Model.CanView)
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount)})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].Amount)

                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly"})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].ExpiryDate)
                                    <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                                }
                                else if (Model.CanView)
                                {
                                    <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount), @readonly = "readonly", disabled = "disabled"})
                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})
                                }
                            }
                            else
                            {
                                <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                <input type="text" size="8" value="###" disabled="disabled"/>
                                @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})

                            }
                        </div>
                    }
                }
            </div>
        </fieldset>

注意:每次加载页面时,控制台都会记录以下错误:“未捕获类型错误:$(…)。bindmvclist不是函数”

什么是
bindmvclist()
?还有什么问题?请看编辑,我不确定什么是
bindmvclist()
,我认为它是一个内置的JQuery函数(我使用的是JQuery 2.1.4),问题是每当我将模型传递给控制器时,这个数据总是空的,即使我将值插入到输入中,而不是一个“内置”JQuery函数。它可能是jquery插件的函数(但听起来不像),也可能是原作者编写的函数。只要把它注释掉,
uncaughttypeerror
就会消失。循环中的条件语句意味着您将不会生成基于零且连续的集合索引器,因此提交时绑定将失败。我不太明白您的意思,条件语句有什么问题?for语句中的
代码存在多个问题-在使用html帮助程序时,您从未设置
属性。您设置了
disabled
属性,这意味着该值不会被发回。但是你的问题是关于
未捕获的类型错误
而不是关于绑定
                @* The insert template is only needed when the form is unlocked and therefore editable. *@
                @if (Model.IsUnlocked)
                {
                    <div data-type="itemtemplate" class="benefits-row">
                        @if (Model.CanEdit)
                        {
                            <input id="Benefits_{0}__AllowanceId" name="Benefits_[{0}].AllowanceID" type="hidden" value="0"/>
                            <select id="Benefits_{0}__AllowanceTypeId" name="Benefits[{0}].AllowanceTypeID" style="width: 220px">
                                @foreach (var allowance in Model.AllowanceTypesBenefits)
                                {
                                    <option value="@allowance.Value">@allowance.Text</option>
                                }
                            </select>
                            <input id="Benefits_{0}__AllowanceAmount" name="Benefits[{0}].Amount" type="text" value="" style="width: 68px;"/>
                            <input id="Benefits_{0}__ExpiryDate" name="Benefits[{0}].ExpiryDate" type="text" value="" class="datepickerrecurring datepicker" style="width: 80px"/>
                            <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                        }
                        else if (Model.CanView)
                        {
                            <p>@Model.Benefits[0].AllowanceTypeName</p>
                        }
                    </div>
                }
                @if (Model.Benefits != null)
                {
                            @* Do not turn into a foreach. *@
                    for (var i = 0; i < Model.Benefits.Count(); i++)
                    {
                        <div class="benefits-row">
                            @Html.HiddenFor(a => Model.Benefits[i].AllowanceID) @* This somehow magically turns into id="Benefits_0__AllowanceTypeID" name="Benefits[0].AllowanceTypeID", which is why a foreach won't work. *@

                            @if (Model.IsUnlocked)
                            {
                                if (Model.CanEdit)
                                {
                                    @Html.DropDownListFor(a => Model.Benefits[i].AllowanceTypeID, new SelectList(Model.AllowanceTypesBenefits, "Value", "Text", Model.Benefits[i].AllowanceTypeID), new {@style = "width:220px;"}, Model.CanView)
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount)})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].Amount)

                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly"})
                                    @Html.ValidationMessageFor(m => Model.Benefits[i].ExpiryDate)
                                    <a class="removeBenefit" href="#"><i class="icon-close-delete"></i></a>
                                }
                                else if (Model.CanView)
                                {
                                    <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                    @Html.TextBoxFor(a => Model.Benefits[i].Amount, Model.CanView, new {maxlength = "100", size = "8", Value = String.Format("{0:0.00}", Model.Benefits[i].Amount), @readonly = "readonly", disabled = "disabled"})
                                    @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})
                                }
                            }
                            else
                            {
                                <span class="benefitLabel">@Model.Benefits[i].AllowanceTypeName</span>
                                <input type="text" size="8" value="###" disabled="disabled"/>
                                @Html.TextBoxFor(a => Model.Benefits[i].ExpiryDate, new {@class = "datepicker", @style = "width: 80px;", Value = String.Format("{0:d/MM/yyyy}", Model.Benefits[i].ExpiryDate), @readonly = "readonly", disabled = "disabled"})

                            }
                        </div>
                    }
                }
            </div>
        </fieldset>