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>