2016-05-23 2 views
1

Я хочу отправить запрос с несколькими параметрами в ASP.Net Core 1.0 (я не знаю, имеет ли это значение).ASP.Net MVC не отображает параметры для вызова ajax

У меня есть следующая модель:

[DataContract] 
public class RegistrationConfigContract 
{ 
    [DataMember] 
    public string ServiceType { get; set; } 
    [DataMember] 
    public int BatchTimeout { get; set; } 
    [DataMember] 
    public int BatchSize { get; set; } 
    [DataMember] 
    public ActorFinishingTypeEnum FinishingType { get; set; } 
} 

Я следующий метод контроллера:

public void SendRegistration(string nodeName, NodeTypeEnum nodeType, RegistrationConfigContract model) 
{ 

} 

У меня также есть JS, который пытается назвать:

function sendRegistration(nodeName, nodeType) { 
    var model = { 
     ServiceType: $("#serviceType").html(), 
     BatchTimeout: $("#batchTimeout").html(), 
     BatchSize: $("#batchSize").html(), 
     FinishingType: $("#finishingType").html() 
    }; 

    var request = { 
     nodeName: nodeName, 
     nodeType: nodeType, 
     model: model 
    } 

    //$.post('@Url.Action("SendRegistration")', request); 
    $.ajax({ 
     url: '@Url.Action("SendRegistration")', 
     type: "POST", 
     dataType: 'json', 
     data: JSON.stringify(request), 
     async: false, 
     cache: false, 
     traditional: true, 
     contentType: 'application/json' 
    }); 
} 

Но на сервере side Я всегда получаю nulls, а на стороне JS все в порядке, согласно отладчику Chrome/Edge.

Что я здесь делаю неправильно? Я попытался использовать код, который я искал для этой проблемы, но он не работает.

Сырое запрос HTTP:

POST http://localhost:8080/Configuration/SendRegistration HTTP/1.1 
Host: localhost:8080 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 
Accept: application/json, text/javascript; q=0.01 
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 
Content-Type: application/json 
X-Requested-With: XMLHttpRequest 
Referer: http://localhost:8080/Configuration 
Content-Length: 156 
X-Compress: 1 
Proxy-Authorization: 6e9b34bd44817cf5c254e1ccb4fe7b31ecd526ea9e025e06a16baca626af6be0ea7fa102c2205f0e 
Connection: keep-alive 

{"nodeName":"zhdp","nodeType":"DocumentProducer","model":{"ServiceType":"jjjjjj","BatchTimeout":"33535","BatchSize":"6666","FinishingType":"UpdateMessage"}} 

ответ

1

Проблема с привязкой к модели ... Модель привязки в ASP.NET Core отличается. Вы должны пометить параметры своего действия соответствующими атрибутами, такими как [FromBody] или [FromForm]. Кроме того, вы можете иметь нормальную форму пост или Ajax пост, но не оба ...

Больше информации здесь: https://andrewlock.net/model-binding-json-posts-in-asp-net-core/

+0

Я нашел ответ сам, но все равно спасибо за ссылку, он имеет некоторые интересные информация в. –

0

Кажется, что это ASP.Net Core ошибка (или функция). Я смешал оба параметра строки запроса и модель. После того, как я это сделал, он может привязать строку запроса, но не может привязать тело запроса. После добавления атрибута [FromBody] все работает хорошо.

JS:

function sendRegistration(nodeName, nodeType) { 
    var model = { 
     ServiceType: $("#serviceType").html(), 
     BatchTimeout: $("#batchTimeout").html(), 
     BatchSize: $("#batchSize").html(), 
     FinishingType: $("#finishingType").html() 
    }; 

    $.ajax({ 
     url: '@Url.Action("SendRegistration")?nodeName={0}&nodeType={1}'.f(nodeName, nodeType), 
     type: "POST", 
     dataType: 'json', 
     data: JSON.stringify(model), 
     cache: false, 
     traditional: true, 
     contentType: 'application/json' 
    }); 
} 

где f является string.Format аналог. И C# сторона:

[HttpPost] 
public void SendRegistration(string nodeName, NodeTypeEnum nodeType, [FromBody] RegistrationConfigContract model) 
{ 

} 

[HttpPost] не нужно здесь, но показать мое намерение лучше, чем его отсутствие.

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