如何使用 MVC Core 获得局部视图的 运行 总数?
How do you get a running total for a partial view using MVC Core?
我仍在学习 MVC 和 ASP.Net 核心,因此对 practices/methods 的任何建议表示赞赏。
我有一个部分视图,我需要在提交之前在客户端输入金额时获取每个文本框输入的总和。这是视图的代码片段(总共有 8 个输入):
<span>Total allocated amount:</span>
<span id="total"></span>
<div class="form-group">
<label asp-for="AllocatedPart" class="control-label">First</label>
<input asp-for="AllocatedPart" class="form-control" />
<span asp-validation-for="AllocatedPart" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="AllocatedSecond" class="control-label">Second</label>
<input asp-for="AllocatedSecond" class="form-control" />
<span asp-validation-for="AllocatedSecond" class="text-danger"></span>
</div>
我使用以下代码将这个部分添加到我的视图中,因此它在页面中为数据库中的每个元素创建了一个部分视图。
@foreach (item in Model)
{
// setup id for div
var divIdAFC = "edit" + item.ID.ToString();
<div id="@{@divIdAFC}">
@await Html.PartialAsync("Partial/_edit", modelWithData)
</div>
}
这是我的 jQuery 代码,它在整个页面上添加了所有部分视图内容:
$(".form-control").each(function () {
var rowval = $(this).val();
var val = parseInt(rowval);
if (!isNaN(val)) {
total = total + val;
}
});
console.log(total);
我使用“@{@divIdAFC}”Div ID 尝试了上面的许多选择器组合,但没有找到正确的选择器组合。
如何将 jQuery 限制为特定局部视图中的内容?或者是否有一种 MVC 或 Razor 方法可以在不调用 jQuery 或 JavaScript 的情况下显示 运行 总数?
您可以在 foreach 循环中包含 jQuery 代码,然后计算目标分部视图中每个输入的总和。我根据你的代码做了一个简单的测试。
索引视图:
@model List<Allocated>
@{
ViewData["Title"] = "Index";
}
@foreach (var item in Model)
{
// setup id for div
var divIdAFC = "edit" + item.ID.ToString();
<div id="@{@divIdAFC}">
@await Html.PartialAsync("Partial/_edit", item)
</div>
<script>
$(document).ready(function () {
var total = 0;
$("#@{@divIdAFC} .form-control").each(function () {
var rowval = $(this).val();
var val = parseInt(rowval);
if (!isNaN(val)) {
total = total + val;
}
});
$("#@{@divIdAFC} #total").text(total)
$("#@{@divIdAFC} .form-control").on("change", function () {
var total = 0;
$("#@{@divIdAFC} .form-control").each(function () {
var rowval = $(this).val();
var val = parseInt(rowval);
if (!isNaN(val)) {
total = total + val;
}
});
$("#@{@divIdAFC} #total").text(total)
})
});
</script>
}
局部视图:
@model Allocated
<h1>Index</h1>
<span>Total allocated amount:</span>
<span id="total"></span>
<div class="form-group">
<label asp-for="AllocatedPart" class="control-label">First</label>
<input asp-for="AllocatedPart" class="form-control" />
<span asp-validation-for="AllocatedPart" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="AllocatedSecond" class="control-label">Second</label>
<input asp-for="AllocatedSecond" class="form-control" />
<span asp-validation-for="AllocatedSecond" class="text-danger"></span>
</div>
控制器操作:
public IActionResult Index()
{
List<Allocated> allocateds = new List<Allocated>
{
new Allocated{ ID = 1, AllocatedPart = "11", AllocatedSecond = "11"},
new Allocated{ ID = 2, AllocatedPart = "22", AllocatedSecond = "22"},
new Allocated{ ID = 3, AllocatedPart = "33", AllocatedSecond = "33"}
};
return View(allocateds);
}
型号:
public class Allocated
{
public int ID { get; set; }
public string AllocatedPart { get; set; }
public string AllocatedSecond { get; set; }
}
结果:
我仍在学习 MVC 和 ASP.Net 核心,因此对 practices/methods 的任何建议表示赞赏。
我有一个部分视图,我需要在提交之前在客户端输入金额时获取每个文本框输入的总和。这是视图的代码片段(总共有 8 个输入):
<span>Total allocated amount:</span>
<span id="total"></span>
<div class="form-group">
<label asp-for="AllocatedPart" class="control-label">First</label>
<input asp-for="AllocatedPart" class="form-control" />
<span asp-validation-for="AllocatedPart" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="AllocatedSecond" class="control-label">Second</label>
<input asp-for="AllocatedSecond" class="form-control" />
<span asp-validation-for="AllocatedSecond" class="text-danger"></span>
</div>
我使用以下代码将这个部分添加到我的视图中,因此它在页面中为数据库中的每个元素创建了一个部分视图。
@foreach (item in Model)
{
// setup id for div
var divIdAFC = "edit" + item.ID.ToString();
<div id="@{@divIdAFC}">
@await Html.PartialAsync("Partial/_edit", modelWithData)
</div>
}
这是我的 jQuery 代码,它在整个页面上添加了所有部分视图内容:
$(".form-control").each(function () {
var rowval = $(this).val();
var val = parseInt(rowval);
if (!isNaN(val)) {
total = total + val;
}
});
console.log(total);
我使用“@{@divIdAFC}”Div ID 尝试了上面的许多选择器组合,但没有找到正确的选择器组合。
如何将 jQuery 限制为特定局部视图中的内容?或者是否有一种 MVC 或 Razor 方法可以在不调用 jQuery 或 JavaScript 的情况下显示 运行 总数?
您可以在 foreach 循环中包含 jQuery 代码,然后计算目标分部视图中每个输入的总和。我根据你的代码做了一个简单的测试。
索引视图:
@model List<Allocated>
@{
ViewData["Title"] = "Index";
}
@foreach (var item in Model)
{
// setup id for div
var divIdAFC = "edit" + item.ID.ToString();
<div id="@{@divIdAFC}">
@await Html.PartialAsync("Partial/_edit", item)
</div>
<script>
$(document).ready(function () {
var total = 0;
$("#@{@divIdAFC} .form-control").each(function () {
var rowval = $(this).val();
var val = parseInt(rowval);
if (!isNaN(val)) {
total = total + val;
}
});
$("#@{@divIdAFC} #total").text(total)
$("#@{@divIdAFC} .form-control").on("change", function () {
var total = 0;
$("#@{@divIdAFC} .form-control").each(function () {
var rowval = $(this).val();
var val = parseInt(rowval);
if (!isNaN(val)) {
total = total + val;
}
});
$("#@{@divIdAFC} #total").text(total)
})
});
</script>
}
局部视图:
@model Allocated
<h1>Index</h1>
<span>Total allocated amount:</span>
<span id="total"></span>
<div class="form-group">
<label asp-for="AllocatedPart" class="control-label">First</label>
<input asp-for="AllocatedPart" class="form-control" />
<span asp-validation-for="AllocatedPart" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="AllocatedSecond" class="control-label">Second</label>
<input asp-for="AllocatedSecond" class="form-control" />
<span asp-validation-for="AllocatedSecond" class="text-danger"></span>
</div>
控制器操作:
public IActionResult Index()
{
List<Allocated> allocateds = new List<Allocated>
{
new Allocated{ ID = 1, AllocatedPart = "11", AllocatedSecond = "11"},
new Allocated{ ID = 2, AllocatedPart = "22", AllocatedSecond = "22"},
new Allocated{ ID = 3, AllocatedPart = "33", AllocatedSecond = "33"}
};
return View(allocateds);
}
型号:
public class Allocated
{
public int ID { get; set; }
public string AllocatedPart { get; set; }
public string AllocatedSecond { get; set; }
}
结果: