0

我有以下 JavaScript 代码,它Id从 Kendo UI 网格中的每个用户行获取属性 (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;
});

action 方法可以是 GET 或 POST 并且不需要返回任何值(这是另一个难题,没有返回视图)。它所做的只是由上述代码之后的其他 ajax 代码获取的域更新。

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

编辑: 这个问题很好地回答了我的问题的一小部分,如何使用push.

4

3 回答 3

4

1.首先你不需要创建完整的 json 你自己使用JSON.Stringify()的方法来将 javascript 对象更改为 JSON 字符串。
2.在你创建了 JSON 字符串之后,你可以将它GETPOST它用于任何可见性公共的 MVC 控制器中的任何普通方法。即使动作方法的签名就像public ActionResult MehodName(string jsonString)你总是可以返回null。
3.您可以使用命名空间中的内置JavaScriptSerializerSystem.Web.Script.Serialization来反序列化您在操作中收到的json字符串,以创建具有相同属性的对象
编辑:-
创建一个javascript数组名称users,然后在javascript的for循环使用.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 Users
{
public string RoleId{get; set;}
public User[]{get; set;}
}

和这样的用户类

class User
{
string Id{get; set;}
}

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

于 2012-04-13T19:06:07.157 回答
1

结合 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;
});
于 2012-04-13T19:36:53.330 回答
0

应该可以使用 Url.Action("NameofAction","nameofcontroller", json); 您可能还必须将 AcceptVerbs 属性添加到操作方法,具体取决于您希望它是 GET 还是 POST。就构建部分而言,我建议根本不使用字符串。Json 是对象,而不是字符串,所以我会继续使用您的 foreach 循环构建一个“用户”对象,然后将该对象放入您的 json 返回对象中。

编辑:忘了提stringify。是的。用那个。

于 2012-04-13T19:10:58.463 回答