Asp.net mvc 3 如何组合JSON对象并将其从jQuery发布到MVC3操作方法?
我有以下JavaScript代码,它从剑道UI网格中的每个用户行获取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 = $(
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 usejson.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