2016-04-02 5 views
1

У меня есть ситуация, когда я получаю данные от вызова ajax. Я хочу вызвать метод действия и передать данные в качестве аргументов. Данные, переданные методу действия, должны быть сопоставлены с объектными свойствами в списке параметров. Вот мой класс, который называется FullQuestion.Как передать сложный объект JSON в методе mvc action?

public class FullQuestion : Question 
{ 
    public string Title { get; set; } 
    public string Content { get; set; } 
    public List<Tag> Tags { get; set; } 
} 

Вот мой метод Ajax вызова

var finalTagResultText = {Title: "title", Content: "content",Tag: { tagName: "tname", tagDescription: "tdesc"},Tag: { tagName: "tname1", tagDescription: "tdesc1"}}; 
$.ajax({ 
    url: '@Url.Action("AskQuestion", "Dashboard")', 
    type: "POST", 
    data: JSON.stringify(finalTagResultText), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(result) { 
     window.location.href = "@Url.Action("Questions", "Dashboard")"; 
    } 
}); 

Вот мой метод действия.

[HttpPost] 
[ActionName("AskQuestion")] 
public void AskQuestion_Post(FullQuestion question) 
{ 
} 

Я хочу, чтобы объект JSON передавался как объект FullQuestion. Я использовал библиотеку json2, чтобы использовать метод stingify. Я получаю текст заголовка и текста, но не объект тега. Любая идея, как я могу это сделать? Заранее спасибо.

ответ

1

Ваша недвижимость коллекция называется Tags (не Tag) и с тех пор его коллекции, вам нужно передать массив Tag объектов, например

var finalTagResultText = { .... , Tags: [{ tagName: "tname", tagDescription: "tdesc"}, { tagName: "tname1", tagDescription: "tdesc1"}]}` 

Side Примечание: Ваш Аякса успех обратного вызова перенаправляет на другой странице, и в этом случае не используйте ajax для отправки ваших данных. Весь смысл ajax состоит в том, чтобы оставаться на одной странице. Вам будет лучше просто выполнить стандартную отправку и использовать RedirectToAction() в методе POST.

+0

Спасибо за вашу помощь человека. Это решило мою проблему. Что касается совета, я знаю, что размещение данных с помощью Ajax-звонка, вероятно, не самый лучший способ, но у меня есть ситуация, когда мои данные динамически берутся с помощью другого вызова ajax. Поэтому я не могу разместить их в классах помощника Html. Может быть, есть лучшее решение для этого случая, но я не знаю, как это сделать! Cheers :) –

+0

В таком случае вам может понадобиться использовать ajax (но, не зная остальной части кода, трудно быть уверенным, что это лучший подход) –

0

Вы используете неправильный формат JSON, используя правильный формат следующим образом:

{"Title": "title", "Content": "content","Tag":[{ "tagName": "tname", "tagDescription": "tdesc"},{ "tagName": "tname1", "tagDescription": "tdesc1"}]} 

Для того, чтобы проверить вашу строку JSON, вы можете использовать ссылку ниже https://jsonformatter.curiousconcept.com/

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