Asp.net mvc 3 如何组合JSON对象并将其从jQuery发布到MVC3操作方法?

Asp.net mvc 3 如何组合JSON对象并将其从jQuery发布到MVC3操作方法?,asp.net-mvc-3,model-view-controller,jquery,kendo-ui,Asp.net Mvc 3,Model View Controller,Jquery,Kendo Ui,我有以下JavaScript代码,它从剑道UI网格中的每个用户行获取Id属性(Guid)。现在我想知道如何最好地将这些Id和所有者roleId组合成一个JSON对象,并将其传递给MVC3操作方法。和我那愚蠢的弦海螺对决 $("#command-add-selected").click(function () { var json = "roleId: '51FC554E-353C-4D55-BE52-1B4BF9D2F17F', users: ["; var avail = $(

我有以下JavaScript代码,它从剑道UI网格中的每个用户行获取
Id
属性(Guid)。现在我想知道如何最好地将这些Id和所有者roleId组合成一个JSON对象,并将其传递给MVC3操作方法。和我那愚蠢的弦海螺对决

$("#command-add-selected").click(function () {
    var json = "roleId: '51FC554E-353C-4D55-BE52-1B4BF9D2F17F', users: [";
    var avail = $("#availableUsersGrid").data().kendoGrid._data;
    for (var i = 0; i < avail.length; i++) {
        json += "{ Id: '" + avail[i].Id + "'},";
    }
    json = json.slice(0, -1);
    json += "]";
    alert(json);
    return false;
});
$(“#命令添加选定”)。单击(函数(){
var json=“roleId:'51FC554E-353C-4D55-BE52-1B4BF9D2F17F',用户:[';
var avail=$(“#availableUsersGrid”).data().kendoGrid._data;
对于(变量i=0;i
动作方法可以是GET或POST,不需要返回任何值(这是另一个难题,没有返回的视图)。它所做的只是由上述代码之后的其他ajax代码获取的域更新

如何将上述类型的JSON传递给实质上为void返回类型的操作方法


EDIT:很好地回答了我问题的一小部分,即如何使用
push
将项目动态添加到数组中

1.首先,您不需要创建完整的json ur self use
json.Stringify()
方法来将javascript对象更改为json字符串
2.创建JSON字符串后,可以
GET
POST
将其发送到任何MVC控制器中的任何普通方法。 即使操作方法的签名类似于
public ActionResult MehodName(string jsonString)
u也可以始终返回null。
3.您可以在
System.Web.Script.Serialization
命名空间中使用内置的
JavaScriptSerializer
类来反序列化您在操作中接收的json字符串,以创建具有相同属性的对象
编辑:-
创建一个javascript数组names
users
,然后在for循环中使用javascript的
.push()
函数插入如下对象

var users = [];
for(something)
{
var user = {"Id":"YOUR ID VALUE"};
users.push(user)
}
var objectToSerialize = {"roleId":"YOUR ROLE GUID","Users":users};
var jsonString = JSON.stringify(objectToSerialize);
编辑2:-
因此,根据您之前的评论,您不希望您需要反序列化整个JSON对象。即使您的操作方法有这样的签名,也要遵循您的对象体系结构

public ActionResult GetUsersByRole(Users users)
{
//some code 
}
class User
{
string Id{get; set;}
}
还有像这样的用户类

class Users
{
public string RoleId{get; set;}
public User[]{get; set;}
}
和这样的用户类

public ActionResult GetUsersByRole(Users users)
{
//some code 
}
class User
{
string Id{get; set;}
}

它会自动将属性与复杂用户对象绑定。首先,您不需要创建完整的json ur self use
json.Stringify()
方法来将javascript对象更改为json字符串
2.创建JSON字符串后,可以
GET
POST
将其发送到任何MVC控制器中的任何普通方法。 即使操作方法的签名类似于
public ActionResult MehodName(string jsonString)
u也可以始终返回null。
3.您可以在
System.Web.Script.Serialization
命名空间中使用内置的
JavaScriptSerializer
类来反序列化您在操作中接收的json字符串,以创建具有相同属性的对象
编辑:-
创建一个javascript数组names
users
,然后在for循环中使用javascript的
.push()
函数插入如下对象

var users = [];
for(something)
{
var user = {"Id":"YOUR ID VALUE"};
users.push(user)
}
var objectToSerialize = {"roleId":"YOUR ROLE GUID","Users":users};
var jsonString = JSON.stringify(objectToSerialize);
编辑2:-
因此,根据您之前的评论,您不希望您需要反序列化整个JSON对象。即使您的操作方法有这样的签名,也要遵循您的对象体系结构

public ActionResult GetUsersByRole(Users users)
{
//some code 
}
class User
{
string Id{get; set;}
}
还有像这样的用户类

class Users
{
public string RoleId{get; set;}
public User[]{get; set;}
}
和这样的用户类

public ActionResult GetUsersByRole(Users users)
{
//some code 
}
class User
{
string Id{get; set;}
}

它会自动将属性与您的复杂用户对象绑定

应该只能够使用Url.Action(“NameofAction”、“nameofcontroller”、json); 您可能还必须向action方法添加AcceptVerbs属性,这取决于您希望它是GET还是POST。 至于构建部分,我建议不要使用字符串。json是对象,而不是字符串,因此我将继续使用foreach循环构建一个“users”对象,然后将该对象抛出到json返回对象中


编辑:忘了提到stringify。是 啊使用它。

应该只能够使用Url.Action(“NameofAction”、“nameofcontroller”、json); 您可能还必须向action方法添加AcceptVerbs属性,这取决于您希望它是GET还是POST。 至于构建部分,我建议不要使用字符串。json是对象,而不是字符串,因此我将继续使用foreach循环构建一个“users”对象,然后将该对象抛出到json返回对象中


编辑:忘了提到stringify。是 啊与Parv Sharma的解决方案结合使用。

function User(id) { this.Id=id; }

$("#command-add-selected").click(function () {

    var avail = $("#availableUsersGrid").data().kendoGrid._data;
    var userArray = array();
    for (var i = 0; i < avail.length; i++) {
        userArray.push(new User(avail[i].Id));
    }
    var obj = {roleId:'51FC554E-353C-4D55-BE52-1B4BF9D2F17F',users:userArray};
    alert(JSON.stringify(obj));
    return false;
});
函数用户(id){this.id=id;}
$(“#命令添加选定”)。单击(函数(){
var avail=$(“#availableUsersGrid”).data().kendoGrid._data;
var userArray=array();
对于(变量i=0;i
结合Parv Sharma的解决方案:

function User(id) { this.Id=id; }

$("#command-add-selected").click(function () {

    var avail = $("#availableUsersGrid").data().kendoGrid._data;
    var userArray = array();
    for (var i = 0; i < avail.length; i++) {
        userArray.push(new User(avail[i].Id));
    }
    var obj = {roleId:'51FC554E-353C-4D55-BE52-1B4BF9D2F17F',users:userArray};
    alert(JSON.stringify(obj));
    return false;
});
函数用户(id){this.id=id;}
$(“#命令添加选定”)。单击(函数(){
var avail=$(“#availableUsersGrid”).data().kendoGrid._data;
var userArray=array();
对于(变量i=0;i
你是在问如何准备json字符串(stringfy)?@sakhunzai否,而是如何动态构建我称之为stringfy的对象。那么,如何在一个动作中使用该对象。可能是您正在寻找的:,我可能无法在MVC3部分提供帮助,但如果您可以共享consumer方法,我可能会有所帮助。您是否在问如何准备json字符串(stringfy)?@sakhunzai No,而不是如何动态构建我调用stringfy的对象。th