2014-11-21 2 views
0

Почему привязка к Web-интерфейсу настолько сложна по умолчанию: Я пробовал много комбинаций, но ни один из них, похоже, не работает. Это Ajax запрос:привязка модели веб-API не работает

var dataString = JSON.stringify({ 
      request: Request 
     }); 
var request = Request; 
$.ajax({ 
     type: "POST", 
     data: '='+dataString, 
     // contentType: 'application/x-www-form-urlencoded', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 

Это контроллер:

public AccResultObject Post(string jezik, string page, string size, string sort,AccRequestViewModel model) 

Это AccRequestViewModel

public class AccRequestViewModel 
{ 
    public AccRequestObject request { get; set; } 
} 

и это AccRequestObject:

public class AccRequestObject 
    { 

     public int FM { get; set; } 
     public int Budget { get; set; } 
     public string WebCatID { get; set; } 


     public int Distance { get; set; } 
    } 

Whatev Я делаю, контроллер получает нулевое значение.

Я попробовал это также. Это кажется очень логичным:

var dataString = JSON.stringify({ 
      request: Request 
     }); 
$.ajax({ 
     type: "POST", 
     data: dataString, ... 

и контроллер получает AccRequestObject:

public AccResultObject Post(string jezik, string page, string size, string sort,[FromBody] AccRequestObjectmodel) 

Он отлично работает, кроме этой маленькой проблемы. Значения не привязаны.

+1

Какова структура строкового запроса «Запрос»? Вам также не нужно добавлять «=» к части данных вызова ajax. – WestDiscGolf

+0

Я узнаю, что мне нужно добавить «=» в WEB API –

+0

Вам не нужно, и, поскольку вы получаете нули в связующем, возможно, попробуйте удалить его :-) Пожалуйста, предоставьте json, который вы пытаетесь POST, как без это сложно определить вопрос – WestDiscGolf

ответ

1

Убедитесь, что свойства каждого объекта, который вы создаете в javascript, соответствуют именно кодовой модели. Если имя свойства имеет верхний регистр в модели кода, оно должно быть прописным в js. Кроме того, чтобы добавить модель с JQuery в контроллер Web Api довольно прост:

//code model 
public class MyModel{ 
    public int MyProperty{get;set;}  
} 

//js 
$.ajax({ 
     contentType: "application/json", 
     dataType: 'json', 
     url: 'http://api/to/my/controller', 
     data: JSON.stringify({MyProperty: 1}), 
     type: "POST" 
    }); 
+0

можно ли как-то избежать наличия прописных букв в js? Установка jsonFormatter.SerializerSettings.ContractResolver = новый CamelCasePropertyNamesContractResolver(); не работает. –

+0

@MilenKovachev Id представьте, что вы могли бы написать свой собственный: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Serialization_IContractResolver.htm –

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