2016-04-02 18 views
1

Ajax çağrısından veri aldığım bir durumum var. Bir eylem metodu aramak ve verileri argüman olarak iletmek istiyorum. Eylem yöntemine geçirilen veri, parametre listesindeki nesne özelliklerine eşlenmelidir. İşte FullQuestion adlı sınıfım.Mvc eylem yönteminde karmaşık JSON nesnesini nasıl geçmeli?

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

İşte benim Ajax çağrı yöntemi

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")"; 
    } 
}); 

İşte benim eylem yöntemi olmasıdır.

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

Bir FullQuestion nesne olarak geçirilen JSON nesnesi almak istiyorum. Stingify yöntemini kullanmak için json2 kütüphanesini kullandım. Başlık ve içerik metnini aldım ancak Tag nesnesi yok. Herhangi bir fikri nasıl başarabilirim? Şimdiden teşekkürler.

cevap

1

Koleksiyonunuzun mülkiyet Tags (değil Tag) olarak adlandırılır ve onun bir koleksiyon beri, örneğin, Tag nesneleri dizisi geçmesine

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

Yan notu ihtiyaç olduğunu: Sizin ajax başarı geri arama başka adına yönlendirme Bu durumda, verilerinizi göndermek için ajax kullanmayın. Ajax'ın bütün noktası aynı sayfada kalmaktır. Standart bir gönderme yapmak ve POST yönteminize RedirectToAction() kullanmaktan daha iyi olursunuz.

+0

Teşekkür kullanabilirsiniz. Sorunumu çözdü. Tavsiyeyle ilgili olarak, Ajax aramasıyla veri göndermenin muhtemelen en iyi yol olmadığını biliyorum, ancak verilerimin başka bir ajax çağrısı ile dinamik olarak alındığı bir durum var. Bu yüzden onları Html yardımcı sınıflarına yerleştiremiyorum. Belki de bu dava için daha iyi bir çözüm var ama nasıl olduğunu bilmiyorum! Şerefe :) –

+0

Bu durumda, ajax kullanmanız gerekebilir (ancak kodun geri kalanını bilmeden en iyi yaklaşımın ne olduğundan emin olmak için) –

0

Sen şöyle doğru biçimi kullanarak, yanlış JSON formatını kullanıyor:

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

JSON dizesini doğrulamak için, aşağıdaki bağlantıyı yardım adam için https://jsonformatter.curiousconcept.com/