2010-05-06 51 views
0

是否有可能發佈,如同在文本框中的值,在同一頁上的2個不同的Ajax窗體?它不一定是在同一時間?2在相同的頁面發佈相同的文本框的ajax窗體

我想要做的是這樣的:我有一個搜索頁面,搜索客戶並在分頁的網格上顯示它們。用戶可以指定最多5個參數(5個文本框)來縮小搜索範圍。

在同一頁上我有一個導出選項。好吧,因爲我希望所有的客戶進行搜索,而不僅僅是分頁的數據,我需要一種方法將這個選項傳遞迴服務器,傳遞網格中使用的相同參數。

我正在使用ViewModel,如果我可以將它傳遞迴服務器而不是由視圖模型支持的單個搜索字段,那麼該ViewModel會很好。

感謝, rodchar

回答

1

既然你做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模型聯編程序就可以識別任何對象。

+0

我會表單元素是

,<%html.beginform%>或<%ajax.beginform%> – Rod 2010-05-07 00:59:46

+0

@rod:真正重要的是渲染輸出。我懷疑它們中的任何一個都會帶來任何問題,但是由於你不打算使用'<%Ajax.BeginForm()%>'的功能,我推薦使用'<%Html.BeginForm()% >',這些選項可以優雅地回退到您在非啓用javascript的瀏覽器上所需的行爲。 – 2010-05-07 08:02:52

+0

顯然$('#theForm')。serialize()可以顯示在控制器上作爲ViewModel類型的參數?它如何知道? – Rod 2010-05-07 12:53:48

1

使用jQuery回發。您可以使用您喜歡的任何字段在JavaScript中構建模型,並將其發佈到您喜歡的任何控制器/操作。

 $.post("/Articles/jQueryAddComment", 
{ commentText: commentText, id: id, type: commentType }, function(newCommentListHTML) { 
     }); 
相關問題