2016-09-02 2 views
0

Может кто-нибудь, пожалуйста, обучить меня тому, почему у меня не может быть свойство JSON с тем же именем, что и параметр контроллера MVC? Я уверен, что я делаю тупую ошибку где-то, но вот сценарий:

предаю $ http.post на контроллер MVC

$ http.post метод:

return $http.post("/Api/Form/Create/Save/DraftForm/", {"Model":"test"}); 

MVC модель

public class FormViewModel 
{ 
    public string Model { get; set; } 
} 

MVC контроллер

[HttpPost, Route("Api/Form/Create/Save/DraftForm") 
public ActionResult Create_Save_DraftForm(FormViewModel model) 
{ 
    .... 
} 

К тому времени, когда someObj попадает на контроллер, он равен нулю.

Однако, если я изменю имя параметра в контроллере «модель» на что-то вроде «viewModel», он отлично работает.

[HttpPost, Route("Api/Form/Create/Save/DraftForm") 
public ActionResult Create_Save_DraftForm(FormViewModel viewModel) 
{ 
    .... 
} 

Как уже упоминалось Shyju, я могу также переименовать свойство «модель» в объекте JSON с другим именем, и он работает, а также:

public class FormViewModel 
{ 
    public string AnotherModel { get; set; } 
} 

return $http.post("/Api/Form/Create/Save/DraftForm/", {"AnotherModel":"test"}); 
+0

Может быть ошибкой в ​​связующем устройстве модели! Переименуйте свое свойство в определенное имя и оно будет работать (пример: CarModel) – Shyju

+0

До сих пор это было мое решение. Это либо ошибка в связующем документе Model, либо я неправильно использую связующее устройство Model. Если бы я догадался, я бы сказал, что это последнее. –

+0

Было упомянуто, что я могу попробовать добавить еще один уровень к объекту, но мне не повезло с этим. –

ответ

0

Я не понял, каким образом данные получал размещены на контроллер ,

Контроллер получает

{"Model", "test"}, 

но ожидает

{ "model": 
    {"Model", "test"} 
} 

В основном, данные передается в контроллер должен иметь имя свойства, которое соответствует параметру контроллера, а свойство должно быть объект, который соответствует объекту параметра в контроллере.