2009-04-21 3 views
0

Я понял, что этот атрибут Bind не нужен, но тип JSON не является обязательным без него. Что мне здесь не хватает? Я запускаю RC1.ASP.NET MVC: нужен ли метод JsonResult атрибут Bind?

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) {..} 

     } 
    } 
    }); 
+1

Можете ли вы подробнее рассказать о своем вопросе?Связывание происходит автоматически, когда имена ваших аргументов соответствуют именам элементов формы на странице html. –

+0

Связывание вообще не произойдет, если я не вложу атрибут Bind. Другие действия работают отлично. см. править – zsharp

+0

Вам нужно предоставить гораздо больше информации –

ответ

1

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

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

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

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

Или взять FormCollection и вызвать UpdateModel().

+0

Я стараюсь все это без успеха. Вырыв переменных, как вы делали, работает, но это не то, что я хочу сделать. Мой код идентичен сообщению выше. проблема заключается только в JSonResult. – zsharp

+0

Я даю вам кредит на консультацию по проверке работоспособности, потому что я идиот. – zsharp

+0

Человек, я был там. Я думаю, что если вы не придете к такому выводу хотя бы раз в неделю, вы, вероятно, ошибаетесь :). – swilliams

2

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

+0

см. Jquery выше. Он работает, когда я добавляю атрибут Bind. Разве это не рекомендуется? – zsharp

2

Приведенный ниже код работает для меня.

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

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

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

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