2012-05-31 2 views
2

Мертвый простой вопрос, возможно, не такой простой ответ. Проводка JSON.WebAPI связывает только первый параметр

public void Post(Model1 model1, Model2 model2) 
{} 

модель1 населенный пункт, но не модель2 (null).

public void Post(Model2 model2, Model1 model1) 
{} 

Теперь модель2 заполняется, но не модель1 (null).

Почему?

Редактировать

Причиной двух параметров? Модель 2 ссылалась на Model1, но это не сработало. Вот тогда я разложил их.

Редактировать

справа. Спасибо marcind за ответ на поставленный выше вопрос. Теперь по этой причине первоначальная настройка не работала. Я больше не являюсь формами вселенной. Я отправляю Json. Если у вас есть дочерние объекты в вашей модели, тогда отправляйте дочерние объекты в json.

Учитывая

class ProductEditModel { 
     public string Name {get; set;} 
} 

class UserEditModel { 
     public string User {get; set;} 
     public ProductEditModel Product {get; set;} 
} 

следующим

{"user": "philip", "product.name": "barbie"} 

не будет работать. Вы бы даже получить ошибку, если вы в JS попытаться настроить Sematic эквивалент

{user: "philip", product.name: "barbie"} 

Ни один из следующих работ либо, я не знаю, почему они были бы:

{"user": "philip", "productname": "barbie"} 


{"user": "philip", "product_name": "barbie"} 

Что работает и должно быть очевидно, что моя профессия является

{"user": "philip", "product": {"name": "barbie"}} 

Пожалуйста, ударьте меня.

Остерегайтесь! Следующие данные не будут работать при соответствующем редактировании модели выше.

{"user": "philip", "ProductEditModel": {"name": "barbie"}} 

ответ

2

Не уверены, какую версию вы используете, но общее правило, мы остановились на том, что при связывании сложных типов Web API учитывает все тело запроса представлять собой единое целое и, таким образом, один параметр действия. В вашем случае, если вы хотите связать несколько Model s, вы можете ввести пользовательский объект привязки или, альтернативно, вы можете привязать к Model[] или другому типу коллекции.

+0

Модель [] не работает. Они действительно разные. Оригинал был установкой Model1.Model2. Был ли я быстро отказаться от этого? – Martin

+0

О, простите меня. Все работает. См. Мое редактирование. – Martin

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