大家好,
我可以使用 ajax.post 发布到 Controller ,但成功后如何使我的 View 刷新新数据。
我需要使用 @Html.BeginForm 来执行此操作吗?
这是我的观点。
<div>
<p>Order lines allocates to <b>@Model.Name (@Model.Code) </b>
</div>
@if (Model.OrderLineAllocations.Any())
{
@grid.GetHtml(
columns: grid.Columns(
grid.Column(header: "Dispatched", style: "row-selector", format: @<text><input name="chkSelected" class="myCheckbox" onclick="expandableEvent(this)" type="checkbox" value="@item.IdAllocation" /></text>),
grid.Column(header: "Order Ref", format: item => item.OrderLineItem.OrderLine.Order.OrderRef)
),
tableStyle: "expandable-table",
rowStyle: "expandable-master-row",
htmlAttributes: new { id = "gridLineAllocations" })
<br />
<input type="hidden" id="hidUnselectedValues" name="hidUnselectedValues" />
<input type="submit" name="action" value="Dispacth" id="btnDispacth" />
<input type="submit" name="action" value="Revert" id="btnRevert" />
}
else
{
@Html.Raw("No records found....");
}
这是我的 ajax 帖子
$(document).ready(function() {
unSelected = [];
$("#btnDispacth").click(dipatchAllocations);
$("#btnRevert").click(revertAllocations);
});
function dipatchAllocations() {
var objInputEmail = $("#hidUnselectedValues");
if (objInputEmail != null) {
var id = objInputEmail.val();
if ((id != null) && (id != "")) {
$.ajax({
type: 'POST',
url: '/Batch/GetData',
data: '{ "allocationId" : "' + id + '","batchId" : "' + @Model.Id + '" }',
contentType: "application/json; charset=utf-8",
//contentType:"application/x-www-form-urlencoded",
traditional: true,
success: subscribed,
error: errorInSubscribing
});
} else {
alert('Please enter a valid email address in order to subscribe.');
}
}
};
这是我的 Controller 操作
[HttpPost]
public ActionResult GetData(long[] allocationId,long batchId)
{
var model = context.GetData(batchId)
model.Name = "asdaksdjaksdj";
return View("Finalize", model);
}
我有一些想法,我必须在成功回电后执行此操作。但我不确定如何将更新后的模型绑定(bind)到客户端的 View 。
谢谢
最佳答案
mvc内部没有简单的“重新绑定(bind)”方法,最后还是html、css和js。
我看到有 2 个选项可以实现所需的行为。
选项 1. 使用 POST 结果覆盖渲染内容
在这种情况下,您的 View 将类似于:
<div id="content">
<div>
<p>Order lines allocates to <b>@Model.Name (@Model.Code) </b>
</div>
...
else
{
@Html.Raw("No records found....");
}
</div>
在 JavaScript 上:
$.ajax({
type: 'POST',
url: '/Batch/GetData',
dataType: "html",
success: function(data, textStatus, jqXHR){
$('#content').html(data);
}
});
选项 2. 在每次加载时填充由 javascript 渲染的 html
这需要将 Razor 逻辑移至 JavaScript。 您的 View 将如下所示:
<div>
<p>Order lines allocates to <b id="NameAndCode"></b>
</div>
JavaScript 将填补空白:
$(function(){
var model = {
NameAndCode: "@Model.Name (@Model.Code)"
}
fillView(model);
})
var fillView = function(data){
$('#NameAndCode').html(data.NameAndCode)
}
$.ajax({
type: 'POST',
url: '/Batch/GetData',
dataType: "json",
success: function(data, textStatus, jqXHR){
fillView(data);
}
});
这只是一小部分,只是为了展示这个想法。
这取决于具体情况选择哪个选项。
关于asp.net-mvc - 如何刷新 AJAX 帖子上的 Razor View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13611485/