Helo all,
我可以使用ajax.post发布到控制器,但是成功后如何使用新数据刷新视图。
我需要使用@ 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.');
}
}
};
这是我的控制器动作
[HttpPost]
public ActionResult GetData(long[] allocationId,long batchId)
{
var model = context.GetData(batchId)
model.Name = "asdaksdjaksdj";
return View("Finalize", model);
}
我有一些想法,我必须在成功回电时这样做。但我不确定如何将我更新的模型绑定到客户端的视图。
由于
答案 0 :(得分:3)
mvc中没有简单的“重新绑定”方法,最后它仍然是html,css和js。
我看到了两种方法来实现理想的行为。
在这种情况下,您的视图将类似于:
<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);
}
});
这需要将Razor逻辑移动到javascript。 您的视图将如下所示:
<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);
}
});
只是为了展示这个想法,这只是一小部分。
取决于选择哪个选项的情况。