JavaScript函数中的Razor执行
本文关键字:Razor 执行 函数 JavaScript | 更新日期: 2023-09-27 17:59:14
在我的Razor视图中,我使用了一个带有选择/取消选择选项的项目列表。我使用的型号是
public class BorrowedItemModel
{
public long Id { get; set; }
public bool IsSelected { get; set; }
public string Item { get; set; }
public double Total{get;set;}
}
我想将总计显示为所有选定项目的总和(如果用户取消选择任何项目,我也想更新总计)。我可以在类似Javascript的函数中使用Razor吗?我尝试了这个代码,但没有显示结果
@model IList<RoyaltyDb.Models.BorrowedItemModel>
<script type="text/javascript">
$(document).ready(function () {
$('.selectionItem').change(function() {
recalculate();
});
});
function recalculate()
{
var total_cal=0;
@{
double total = 0;
foreach(var item in Model)
{
if (item.IsSelected)
{
total += item.Royalty;
}
}
}
//Can i asssign this grand total outside here ??
}
</script>
<div class="col-md-8">
<table id="borrowedtexts" class="table table-striped">
<thead>
<tr>
<th>
Select
</th>
<th>
@Html.DisplayNameFor(model => model[0].Item)
</th>
<th>
@Html.DisplayNameFor(model => model[0].Total)
</th>
</tr>
</thead>
<tbody>
@for (int item = 0; item < Model.Count(); item++)
{
<tr>
<td>
@Html.CheckBoxFor(modelItem => Model[item].IsSelected, new { @class="selectionItem"})
@Html.HiddenFor(modelItem => Model[item].Id)
</td>
<td>
@Html.DisplayFor(modelItem => Model[item].Item, new { disabled = "true" })
</td>
<td>
@Html.DisplayFor(modelItem => Model[item].Total, new { disabled = "true" })
</td>
</tr>
}
</tbody>
</table>
</div>
<div class="col-md-4">
//Want to show grand total here...
</div>
Razor的执行是在服务器端完成的。由于逻辑执行应该发生在复选框选择更改的每个事件上,因此必须用javascript进行计算。
您需要为总单元格放置一些标识符,然后按以下方式修改javascript。
项目的循环内容:(将类"total"添加到总td标签
<tr>
<td>
@Html.CheckBoxFor(modelItem => Model[item].IsSelected, new { @class="selectionItem"})
@Html.HiddenFor(modelItem => Model[item].Id)
</td>
<td>@Html.DisplayFor(modelItem => Model[item].Item, new { disabled = "true" })</td>
<td class="total">@Html.DisplayFor(modelItem => Model[item].Total, new { disabled = "true" })</td>
</tr>
显示总计的div:
<div class="col-md-4" id="grandTotalDiv">
</div>
最后是脚本:
<script type="text/javascript">
$(document).ready(function () {
$('.selectionItem').change(function () {
recalculate();
});
recalculate();
});
function recalculate() {
var total_cal = 0;
$('input:checkbox.selectionItem').each(function () {
var sThisVal = (this.checked ? parseFloat($(this).parent().siblings('.total').html()) : "");
if(sThisVal !== NaN) {
total_cal += sThisVal;
}
});
$('#grandTotalDiv').html(total_cal);
}
</script>
dotnet小提琴