我正在尝试创建一个MVC视图,该视图将在许多表中显示一些数据,然后通过单击要更新的表上的“提交”按钮来允许更新该数据。在更新表时,表中的记录可能会从一个表移到下一个表(这全部在服务层而不是视图中处理)。目前,我有从控制器渲染的视图,每个表都是一个单独的局部视图,向用户显示数据。我的更新被jQuery方法拦截,该方法从表中捕获数据,然后将其作为JSON字符串发布到控制器。然后,控制器反序列化JSON并将其发布到服务层。
然后,我想做的就是控制器返回一个视图结果,该结果将刷新整个页面,更新每个表,以便显示适当的记录。除了页面刷新之外,我还有其他工作要做-我的控制器返回一个视图结果,并且返回时视图和模型都正确,但是页面没有刷新,正如我期望的那样。
我想我缺少了一些愚蠢的东西,但此刻我看不到它是什么...
代码-
jQuery脚本上的视图:
function DailyPaymentIn(payInId, payOut, notes) {
this.PayInId = payInId;
this.PayOut = payOut;
this.Notes = notes;
}
$(function () {
$('#update-yes-payments').submit(function (e) {
e.preventDefault();
var payments = new Array();
$('#payment-table-yes tbody tr').each(function () {
var payInId = $('input#PayInId', this).val();
var payOut = $('input#PayOut', this).is(':checked');
var notes = $('input#payment_Notes', this).val();
payments.push(new DailyPaymentIn(payInId, payOut, notes));
});
$.get('/payments/UpdatePayments', { json: JSON.stringify(payments) });
});
});
上面是将值捕获到对象中,然后将其序列化为JSON。一切正常-数据发送到控制器方法,并在到达时处于正确的形状。我已经将get换成了实验的职位,但没有任何运气。
控制器方法:
呈现数据的方法:
[HttpPost]
public ViewResult PayInAdmin(PayInAdminModel model)
{
var payments = _autoPayOutService.PopulatePayments(model.PaymentsDate);
return View("AutoPayOut/PayInAdmin", payments);
}
这将返回正确填充的视图。
更新数据的方法:
public ViewResult UpdatePayments(string json)
{
var updates = Deserialise<List<DailyPaymentInUpdateModel>>(json);
var model = _autoPayOutService.UpdatePayments(updates);
return View("AutoPayOut/PayInAdmin", model);
}
这是在接收JSON并对其进行正确处理,但是返回时,页面不会更新。请注意,返回的视图在两个控制器操作上都是相同的,并且服务调用的返回类型也相同-我可以看到在调试中返回的填充正确的模型。
据我所知,我不确定问题出在哪里,这是否应该正确返回视图。我对jQuery和MVC 3还是很陌生,所以很可能是我以错误的方式进行操作-是否应该以其他方式执行此操作,还是只是错过了某些内容,我不确定。
干杯
最佳答案
如果需要更新整个页面,则不需要使用ajax方法$.get
。
尝试以下方法:
window.location = '/payments/UpdatePayments?json=' + JSON.stringify(payments);