我試圖創建一個MVC視圖,它將顯示一些表中的一些數據,然後通過點擊表上的提交按鈕來更新數據更新。在表更新的時候,表中的記錄可能會從一個表移動到另一個表(這全部在服務層而不是視圖中處理)。目前,我已從控制器呈現視圖,並且每個表都是將數據顯示給用戶的單獨局部視圖。我的更新被jQuery方法攔截,該方法捕獲表中的數據,然後將其作爲JSON字符串發佈到控制器。控制器然後反序列化JSON並將其發佈到服務層。將jQuery.get後的頁面重新加載到MVC控制器操作
然後我想要發生的是控制器返回一個視圖結果,刷新整個頁面,更新每個表,以便它顯示適當的記錄。我除了頁面刷新之外還有一切工作 - 我的控制器返回一個視圖結果,並且視圖和模型在返回點都是正確的,但是頁面並沒有像我期望的那樣刷新。
我想我失去了一些東西愚蠢的,但在一分鐘我還看不出來是什麼...
碼 -
在視圖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。這是所有工作 - 數據發送到控制器方法,並在到達時處於正確的形狀。我已經在實驗中交換過帖子,沒有任何運氣。
控制器方法:
方法來呈現數據:
[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相當陌生,所以很可能我會以錯誤的方式去解決它 - 我是否應該以不同的方式執行此操作,或者我是否錯過了某些內容,我不確定。
乾杯
這個工作,但產生一個可怕的網址。它正在做我所需要的。非常感謝。 – 2012-02-10 11:49:39
雖然這個工作,我仍然建議你稍微改變這種方法。如果您要「更新付款」,則應該執行** POST **而不是GET,然後它不會顯示在您的URL中。另外,請考慮[建議](http://www.boutell.com/newfaq/misc/urllength.html)不要創建URL太長(超過2000個字符)。 – 2012-02-10 12:16:41
再次,如果您要更新整個頁面,請使用標準表單提交而不是$ .post函數。 – 2012-02-10 12:17:58