ASP.NET MVC: требует ли метод JsonResult атрибут Bind? - PullRequest
0 голосов
/ 21 апреля 2009

Я понял, что этот атрибут Bind не был необходим, но тип JSON без него не является обязательным. Что мне здесь не хватает? Я бегу RC1.

Edit:

это должно работать:

public JsonResult Index(Person person)
{
    do something with person.
}

Но это не будет работать для некоторых действий контроллера, если я не сделаю это:

public JsonResult Index([Bind(Prefix="")]Person person)
{

}

Первый объект недействителен.

jQuery Ajax:

  $.ajax({
               type: "POST",
               url: "/Index/Person",
               data: { PersonID: personID, Name: name },
               dataType: "json",
               success: function(data) {..}

       }
     }
  });

Ответы [ 4 ]

2 голосов
/ 01 мая 2009

Код ниже работает для меня.

Кроме того, просто для проверки, вы уверены, что у вас есть хотя бы версия MVC для RC1? Ранние предварительные просмотры MVC действительно требовали атрибута Bind, но он был изменен в RC1, чтобы сделать атрибут [Bind] ненужным для обычных случаев. См. этот пост для деталей.

Javascript код:

$(function() {
    $("#result").text("Calling Ajax...");
    $.ajax({
        type: "POST",
        url: "/Home/Person",
        data: { Name: "Erv Walter", PersonID: "123" },
        dataType: "json",
        success: function(data) {
            $("#result").text(data.Name);
        }
    });
});

С этим в HTML:

<div id="result" />

Код контроллера:

[AcceptVerbs("POST")]
public JsonResult Person(Person person)
{
    person.Name = person.Name.ToUpper();
    return Json(person);
}

и класс Person выглядит следующим образом:

public class Person
{
    public string Name { get; set; }
    public string PersonID { get; set; }
}
2 голосов
/ 30 апреля 2009

Атрибут Bind не является обязательным для привязки модели в целом. Тем не менее, ваш вопрос не дает достаточно подробностей для того, чтобы кто-то мог судить о том, что является реальной проблемой. Если вы пытаетесь отправить JSON на сервер , то все это не будет работать. Привязка модели по умолчанию привязывает только опубликованные значения формы к аргументам метода действия.

1 голос
/ 06 мая 2009

Сначала сделайте некоторую проверку вменяемости. У вас, вероятно, есть большинство, если не все из них, но без небольшого кода, мы вроде как в связке:

Есть ли у вас фильтр [AcceptVerbs(HttpVerbs.Post)] в вашем действии? Попробуйте пометить Person как [Serializable]. Как выглядит ваш Person? Есть ли у него конструктор по умолчанию? Что-нибудь происходит в конструкторе по умолчанию, что может вызвать ошибку? Убедитесь, что вы используете точно такое же написание на свойствах Person

Попробуйте выполнить действие, которое не использует Person в качестве аргумента:

[AcceptVerbs(HttpVerbs.Post)]
public JsonResult Index(int PersonID, string Name) {}

Или возьмите FormCollection и позвоните UpdateModel().

0 голосов
/ 07 мая 2009

Проблема заключалась в том, что имя переменной параметра имело то же имя (но в нижнем регистре), что и переменная в объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...