2013-10-30 40 views
1

在我的項目中,我在同一頁面上有多個表單,我想一次將其傳遞給控制器​​。 如何實現這一目標?如何將多個表單傳遞給控制器​​

<script> 
function onSaveButtonClicked() { 
    var form = $("#SaveForm").serialize(); 
    var form2 = $("#SaveForm").serialize(); 


    $.ajax({ 
     url: '@Url.Action("Filter","SearcherEngine")', 
     type: 'post', 
     dataType: 'json', 
     contentType: 'application/json', 
     data: JSON.stringify({ model: form, model2: form2 }), 
     cache: false, 
     success: function (result) { 
      alert(result); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert(thrownError); 
     } 
    }); 

}; 

[HttpPost] 
public ActionResult Filter(MyViewMOdel model,MyViewModel2 model2) 
{ 
} 
+1

難道你不能把它們包裝起來,兩個類,到一個單一? –

+0

我想,而不是調用serialize()來獲取字符串,你應該有你的窗體和form2作爲json對象。請參閱:http://stackoverflow.com/a/1186309/1236044 – jbl

+0

不,它們位於單獨的選項卡上(demos.telerik.com/aspnet-mvc/razor/tabstrip) – user1075940

回答

0

我在一個加入這兩種模式,並纏一種形式的局部視圖。

class MyModel 
{ 
    ... 
} 

    @model MyModel; 
    @using(Html.BeginForm()) 
    { 
     Html.RenderPartial("Path",Model); 
     Html.RenderPartial("Path",Model); 
    } 
1

是什麼使這個複雜的是每個形式不同的視圖模型。因此,您不能簡單地使用數組並映射到公共類的列表。

請記住,模型結合基於傳遞的對象(張貼在這種情況下)的結構來完成。所以,你需要做的是創建一個可容納你想在C#中傳遞什麼結構的模型,然後 JavaScript創建相同的結構來傳遞。

public class ViewModelSet 
{ 
public MyViewModel model1 { get; set; } 
public MyViewModel1 model2 { get; set; } 
} 

現在,您需要重新創建這種結構與在JavaScript的確切相同的命名爲屬性

var form1 = ...; 
var form2 = ...; 

var modelSet = {}; 
modelSet.model1 = form1; 
modelSet.model2 = form2; 

接着通過這在

(只有參數的名稱必須預期參數服務器側的名稱相匹配)
data: { model : modelSet }, 

,並期望這是通過服務器端

public ActionResult FilterNCTS(ViewModelSet model) 
{ 
    //Now you should be able to have access to nested models 
    // TODO: work with model.model1 
    ... 
} 
相關問題