2012-04-13 1 views
0

У меня есть следующий код JavaScript, который получает свойство Id (Guid) из каждой строки пользователя в сетке пользовательского интерфейса Kendo. Теперь мне интересно, как лучше составить эти идентификаторы и роль roleId в объект JSON, который я могу передать методу действия MVC3. В сравнении с моей глупой строкой конкат.Как создать и отправить объект JSON из jQuery в метод действия 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; 
}); 

Метод действия может быть GET или POST и не нужно возвращать никакого значения (это еще одна загадка здесь, не вернулся вид). Все, что он делает, это обновления домена, которые извлекаются другим кодом ajax после указанного выше кода.

Как передать описанный выше тип JSON методу действия, по существу, типа возвращаемого типа?

EDIT:This question ответил незначительную часть моего вопроса хорошо, с тем, как динамически добавлять элементы в массив с push.

+0

вы спрашиваете, как подготовить JSon строку (stringfy)? – sakhunzai

+0

@sakhunzai Нет, скорее как динамически построить объект, на который я вызываю stringify. то как использовать этот объект в действии. – ProfK

+0

Возможно, вы ищете следующее: http://stackoverflow.com/questions/2277405/json-stringify-missing-from-jquery-1-4-1, возможно, я не смогу помочь в части MVC3, но если вы можете разделить потребительский метод, я мог бы быть полезным. – sakhunzai

ответ

4

1. Прежде всего, вам не нужно создавать полный json ur self use JSON.Stringify() метод изменения объекта javascript на строку JSON.
2.after u создал строку JSON u может GET или POST это любому нормальному методу в любом MVC-контроллере видимости public. , даже если подпись метода действия похожа на public ActionResult MehodName(string jsonString) u всегда может вернуть значение null.
3. и можно использовать встроенный в JavaScriptSerializer классе в System.Web.Script.Serialization имен десериализовать строку JSON у делат в действии, чтобы создать объект с тем же propertiese
Edit: -
Сделайте JavaScript Имен массивов users затем внутри для цикла использовать .push() функции JavaScript для вставки объектов, как этого

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); 

Edit 2: -
так происходит ваши предыдущие комментарии у не хотят, что и нужно deseralize всего объекта 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;} 
} 

он будет автоматически связать с объектом ваших сложных пользователей

+0

ОК, но как бы я динамически добавлял id к массиву на объект, который вскоре должен быть json без concat? – ProfK

+0

Я отредактировал и включил образец кода u, запрошенный –

+0

. Не забудьте установить «Mark As Ans», если это ответ ур. это тоже поможет другим –

0

Следует просто использовать Url.Action («NameofAction», «nameofcontroller», json); Возможно, вам придется добавить атрибут AcceptVerbs в метод действия, в зависимости от того, хотите ли вы, чтобы он был GET или POST. Что касается части здания, я бы предложил не использовать строки вообще. Jsons - это объекты, а не строки, поэтому я бы пошел и построил объект «users» с вашим циклом foreach, а затем выбросил этот объект в ваш возвращаемый объект json.

изменить: забыли упомянуть строчить. Да. Используйте это.

+0

ОК, избегая строк, к чему я привязываюсь в контроллере? – ProfK

+0

вы просто передадите свой json-объект, который вы создали в качестве аргумента для Url.Action() (я не помню точной перегрузки для него - я думаю, его Url.Action (Action, Controller, Argument)), а затем соответствующее действие в вашем контроллере должно принимать один аргумент любого типа, который вам нужен (при условии, что вы правильно настроили объект JSON), а затем вы сможете выполнить привязку с контроллера –

1

В сочетании с раствором Parv Шармы:

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; 
}); 
+0

Спасибо, это было главным образом «push» I необходимых для этой стороны вещей. – ProfK

Смежные вопросы