【发布时间】:2012-02-09 18:00:04
【问题描述】:
我正在尝试创建一个 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 换成 post 并且没有任何运气。
控制器方法:
渲染数据的方法:
[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 还很陌生,所以很可能是我用错了方法——我是否应该以不同的方式执行此操作,或者我是否只是错过了一些东西,我不确定.
干杯
【问题讨论】:
标签: c# jquery json asp.net-mvc-3