2015-03-13 105 views
0

以下是我的相关代码。我想将2个模型传递给POST方法。MVC C# - AJAX将2个模型传递给控制器​​

如何将2个模型传递给控制器​​?

var mod1 = [], mod2 = []; 
mod1.push({ 
    Server: Server, 
    Name: Name     
}); 

mod2.push({ 
    POP: POPServer, 
    .... 
}); 

Settings = JSON.stringify({ 'Settings ': mod1 }); 

jq.ajax({ 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    type: 'POST', 
    url: '/Site/insertSettings', 
    data: Settings , 
    success: function() { 
     .... 
    } 
}); 

控制器

[HttpPost] 
public JsonResult insertSettings(Settings mod1, OtherSettings mod2) 
{ 
    .... 
} 
+1

var data = JSON.stringify({'mod1':mod1,'mod2':mod2});'? – DLeh 2015-03-13 12:22:24

+0

真的很想知道是否可以使用MVC,因为Web-API不允许这样做。 http://stackoverflow.com/a/14407502/1505865 – 2015-03-13 12:22:46

+1

我不认为它适用于多个复杂的对象,虽然也许是一个自定义联编程序?简单的方法是用你的两个对象创建一个新对象 – Ewan 2015-03-13 12:34:52

回答

2

我对这种情况的方法就是创建一个包含两个模型的模型。这将是这样的:

public class InsertSettingsViewModel() 
{ 
    public Settings settings { get; set; } 
    public OtherSettings otherSettings { get; set; } 
} 

所以您的控制器将要接收的参数的大对象:

[HttpPost] 
public JsonResult insertSettings(InsertSettingsViewModel model) 
{ 
    //Here you manipulate your objects 
} 

而且你的JS的行动是要提供对象

var bigMod = []; 
var mod1 = [], 
var mod2 = []; 
mod1.push({ 
    Server: Server, 
    Name: Name     
}); 

mod2.push({ 
    POP: POPServer, 
    .... 
}); 
bigMod.push({ 
    settings: mod1, 
    otherSettings : mod2 
}) 

Settings = JSON.stringify({ 'model': bigMod }); 

这种方式是一个更清洁的代码,我真的不认为你可以传递一个控制器的各种对象。希望能帮助到你。

相关问题