【发布时间】:2023-03-26 05:16:02
【问题描述】:
我在 ASP.NET MVC 视图中有一个包含数据的表。我想要做的是用户能够更改表中的数据并通过按下按钮将新数据发送到控制器。我需要获取用户在表中修改的 innerHTML 数据,并通过 AJAX 调用将该数据发送到控制器方法。
问题是表格是在 Razor 视图中动态生成的,并且为了能够获取标签的 innerHTML,我需要知道用户修改的元素的 id。由于它是动态生成的,我不知道那个 id,所以我不能只使用 jQuery 并从 HTML 标签中提取数据。
我认为唯一可行的解决方案是打开一个带有新公式的新页面,并且用户能够在那里修改数据,但我不想使用这个解决方案来创建一个新的公式和一个重定向到另一个页面。
我想到的另一个解决方案是创建一个按钮,该按钮在单击时调用 Javascript 函数,该函数从表中获取所有 innerHTML 数据并将其发送回控制器。控制器然后验证数据库中的每一行,如果它被修改,它会更新数据库。那将是很多工作,我不知道它是否真的有效。
我在这里添加了我正在处理的视图:
@using Models;
@using Newtonsoft.Json;
@{
var lstBID = ViewBag.BIDList as IEnumerable<BID>;
int[] j = lstBID.Select(id => id.Id).ToArray();
string s = JsonConvert.SerializeObject(j);
}
@model Models.BID
<head>
<script>
var arr = @s;
$(document).ready(function() {
console.log(arr);
var BID = {
Id: $("#Id").html(),
Price: $("#Price").html(),
Quantity: $("#Quantity").html()
}
$("#bidupdate").click(function() {
console.log("Hello")
$.ajax({
type: "POST",
url: "/User/UpdateBID",
data: BID,
cache: false,
async: true,
dataType: "json",
success: function(data) {
alert(data);
},
});
});
});
</script>
</head>
<html>
<body>
<div style="width:100% ;padding-right:30%; float :left">
<table id="verticalScroll" class="table-editable table table-light table-bordered table-sm" cellspacing="0">
<thead class="thead-dark">
<tr>
<th>
ID
</th>
<th>
CompanyName
</th>
<th>
Price
</th>
<th>
Quantity
</th>
</tr>
</thead>
<tbody>
@foreach (BID b in lstBID) {
<tr>
<td id="Id_@b.Id">
@b.Id
</td>
<td>
@b.CompanyName
</td>
<td id="Price_@b.Id" contenteditable="true">
@b.Price
</td>
<td id="Quantity_@b.Id" contenteditable="true">
@b.Quantity
</td>
<td>
<button type="button" value="Details" class="btn btn-primary" id="@b.Id">Update</button>
</td>
</tr>
}
</tbody>
</table>
</div>
</body>
</html>
【问题讨论】:
标签: javascript jquery asp.net asp.net-mvc razor