既然你做AJAX請求,我們可以有把握地認爲JS被允許;)
因此,使用jQuery(或其他JS庫)來執行AJAX回傳,並只是張貼到不同的網址。
function postTo(url) {
$.post(
url,
$('#theForm').serialize(),
function(returnData) {
// do this on success
}
);
}
然後,只需連上兩個不同的調用此方法您提交的鏈接/按鈕:
$(function() {
$('#searchButton').click(function() {
postTo('/search/');
});
$('#exportButton').click(function() {
postTo('/export/');
});
});
編輯響應後續問題的意見:
Q1 )控制器如何將$('#theForm').serialize()
解析爲ViewModel
對象?
A1)這是ASP.NET MVC模型綁定的所有部分,並且與jQuery代碼無關。所有.serialize()
的表格都是以類似查詢字符串的格式排列其名稱和值,因此JSON對象上的data
將最終爲類似'textbox1=first value&textbox2=second value'
等的所有表單值。這與常規POST請求的工作方式相同,所以ASP.NET MVC不需要處理任何不同於常規的非AJAX請求。 Q2)控制器是否可以返回實體對象,並且回調函數是否可以讀取它? A2)你可以在你的控制器中使用return Json(...)
將大多數對象序列化爲JSON,但是不推薦返回和實體對象(我假設它是來自實體框架)。擁有僅具有必要屬性的數據傳輸對象(DTO)要好得多。
至於回調,只要輸入數據格式正確,ASP.NET MVC模型聯編程序就可以識別任何對象。
我會表單元素是
@rod:真正重要的是渲染輸出。我懷疑它們中的任何一個都會帶來任何問題,但是由於你不打算使用'<%Ajax.BeginForm()%>'的功能,我推薦使用'<%Html.BeginForm()% >',這些選項可以優雅地回退到您在非啓用javascript的瀏覽器上所需的行爲。 – 2010-05-07 08:02:52
顯然$('#theForm')。serialize()可以顯示在控制器上作爲ViewModel類型的參數?它如何知道? – Rod 2010-05-07 12:53:48