C# 为什么我的MVC Razor只在第一次返回视图时填充HTML表?
我试图从数据库中填充HTML表。从数据库中检索数据 控制器代码:C# 为什么我的MVC Razor只在第一次返回视图时填充HTML表?,c#,asp.net-mvc,razor,model-view-controller,html-table,C#,Asp.net Mvc,Razor,Model View Controller,Html Table,我试图从数据库中填充HTML表。从数据库中检索数据 控制器代码: public ActionResult Transaction(int pageNumber = 1, int resultsPerPage = 10) { Logic.ManipulateTransaction.SelectTransactions(Guid.Parse(Session["UserId"].ToString()), Guid.Parse("013E3D0F-E755-495B-8D1E-4A3D1340A
public ActionResult Transaction(int pageNumber = 1, int resultsPerPage = 10)
{
Logic.ManipulateTransaction.SelectTransactions(Guid.Parse(Session["UserId"].ToString()), Guid.Parse("013E3D0F-E755-495B-8D1E-4A3D1340ACF8"), 0, 9223372036854775807, false, DateTime.Now.Date, DateTime.Now.Date, pageNumber - 1, resultsPerPage);
return View(currentPageTransactions);
}
首次访问此页面时,currentPageTransactions
返回到视图。视图将其识别为模型精细,并使用以下代码填充HTML表格精细:
@{ int rowNumber = 0; }
@foreach (var transaction in Model)
{
<tr>
<td hidden>@transaction.transaction_id</td>
<td hidden>@transaction.category_id.ToString().ToUpper()</td>
<td>@transaction.name</td>
<td>@transaction.type</td>
<td>@transaction.amount</td>
<td>@transaction.description</td>
<td>@transaction.datestamp.ToString("MM/dd/yyyy")</td>
<td hidden>@(rowNumber += 1)</td>
<td width="20%">
<input type="button" class="btn btn-warning" value="Modify" onclick="EditTransactionModal(this)" data-toggle="modal" data-target="#modifyTransactionModal" />
<input type="button" class="btn btn-danger" value="Decimate" onclick="DeleteTransaction(this)" />
</td>
</tr>
}
这可能与
POST
有关吗?我已尝试将其更改为GET
,但无法将paginationObject
的属性传递到ActionMethod
使用AJAX,浏览器将不会离开当前页面,也不会自动重新加载页面。这通常是我们在使用AJAX时想要的。因此,您需要捕获来自AJAX帖子的响应并自己更新DOM
首先标识或创建父元素
<div id="parent">
@* The table is what we want re-rendered after the POST, then inserted here *@
<table>
@{ int rowNumber = 0; }
@foreach (var transaction in Model)
{
<tr>
<td hidden>@transaction.transaction_id</td>
...
</tr>
}
</table>
</div>
控制器操作的默认HTTP动词是
GET
,因此您的调用可能会被缓存。您是使用库来发出ajax请求还是使用纯JavaScript?向我们展示您如何调用事务操作。@Jasen,我已经将其包括在问题中。@StaticBeagle,我没有听说过使用库来发出ajax请求,所以可能没有。如果我的JS函数回答了您的问题,那么我就包括了它?对于POST请求,您不应该这样做获取缓存问题。但是,您完全忽略返回的响应。添加一个成功处理程序并替换现有的html。当我们替换html结果时,这是否对效率有显著影响?我假设,既然我们已经有了响应,它也是客户端的?最大的好处是用户不会经历完全的重新加载-它看起来不会被导航走。如果您只是替换文档上的几行,那么是的,这会减少网络流量。我理解。我注意到你的例子中有些东西。如果我将断点放在GetTransactions()
中的任何位置,则在我第一次执行POST
时,它将被命中,并按预期重新填充表。当我再次执行第二次操作时,断点没有命中,但表仍按预期刷新。当未完成POST
时,如何获得正确的数据?页面上的脚本是否也与html内容一起被替换?如果您在被替换的脚本中创建了断点,则下一次运行将在不同的调试上下文中。编写主页,这样脚本就不会被替换,而表是唯一被替换的html。我这里还有一个例子
<div id="parent">
@* The table is what we want re-rendered after the POST, then inserted here *@
<table>
@{ int rowNumber = 0; }
@foreach (var transaction in Model)
{
<tr>
<td hidden>@transaction.transaction_id</td>
...
</tr>
}
</table>
</div>
$.ajax({
url: '/Transaction/Transaction',
data: JSON.stringify(paginationObject),
type: "POST",
contentType: "application/json;charset=utf-8",
error: function (errormessage) {
alert(errormessage.responseText);
},
success: function(htmlResponse)
{
$("#parent").html(htmlResponse);
}
});