【发布时间】:2016-05-19 20:27:19
【问题描述】:
如何在 razor 中创建一个跟踪 SuccessCriteria 计数的全局变量?单击insert-success-criteria 按钮时,我正在为SuccessCriteria 动态创建表单输入,并删除单击remove-success-criteria 按钮时创建的最后一个表单输入。因此,我需要像model => model.SuccessCriteria[count] 这样的东西,count 在添加输入时递增,在删除输入时递减。
我在我的函数上方尝试了@{int count = 1; },但这会将其存储在本地,我无法在我的函数中访问它
另外,有没有办法在我删除数组元素时将其设置为 null?
我试过 @{SuccessCriteria[count] = null;} 但这不起作用。
型号:
public int SuccessCriteriaId { get; set; }
[Required]
[Display(Name = "Success Criteria/ROI:")]
public virtual List<String> SuccessCriteria { get; set; }
查看:
<table>
<tr class="form-group col-xs-12">
<td class="form-label col-xs-4">
@Html.LabelFor(model => model.SuccessCriteria, htmlAttributes: new { @class = "control-label col-xs-12" })
</td>
<td class="form-input col-xs-8">
<ul>
<li class="base-success-criteria">
@Html.EditorFor(model => model.SuccessCriteria[0], new { htmlAttributes = new { @class = "form-control col-xs-12" } })
@Html.ValidationMessageFor(model => model.SuccessCriteria, "", new { @class = "text-danger" })
</li>
</ul>
</td>
</tr>
<tr class="form-group col-xs-12">
<td class="form-label col-xs-4"></td>
<td class="form-input col-xs-8">
<button class="btn btn-primary btn-xs" id="insert-success-criteria"><i class="glyphicon glyphicon-triangle-bottom"></i></button> Insert another measurement
</td>
</tr>
</table>
脚本:
<script type="text/javascript">
@{int counter = ViewBag.SucCritCounter; }
jQuery(function ($) {
$('#insert-success-criteria').on("click", function (e) {
$(this).closest('tr').prev('tr').find('.remove-success-criteria').remove();
$(this).closest('tr').prev('tr').find('ul')
.append(
'<li>' +
'@Html.EditorFor(model => model.SuccessCriteria[counter], new { htmlAttributes = new { @class = "form-control col-xs-12" } })' +
'<button class="btn btn-danger btn-xs remove-success-criteria"><i class="glyphicon glyphicon-remove"></i></button>' +
'</li>');
@{counter++; }
});
});
jQuery(function($) {
$('ul').on("click", "button.remove-success-criteria", function(e) {
if (!$(this).closest('li').prev('li').hasClass('base-success-criteria')) {
$(this).closest('li').prev('li')
.append('<button class="btn btn-danger btn-xs remove-success-criteria"><i class="glyphicon glyphicon-remove"></i></button>');
}
@{counter--; }
$(this).parent().remove();
});
});
</sript>
【问题讨论】:
-
从代码中根本不清楚为什么需要“全局变量”,但
@{ int counter = ViewBag.SucCritCounter; }正在为服务器端变量赋值(当页面发送到看法)。如果要更新服务器上的某些静态计数器,则需要使用 ajax 将值发布到更新它的控制器方法。另一方面,如果您可以使用客户端计数器,那么它的var counter = '@ViewBag.SucCritCounter'; inside the scipt, which your can then increment usingcounter++;`
标签: c# jquery asp.net-mvc razor