2013-04-05 79 views
0

我一直在一個項目上工作都是我的需求涉及JSON。但是現在突然間我需要返回可以在輸入元素值字段中使用的模型結果。我無法使用我一直使用的解決方案,因爲我獲取的是對象而不是純文本的對象。這是我一直在使用控制器的模式:MVC控制器返回的內容而不是JSON

public virtual JsonResult fooData() 
{ 
    var fooresults = new fooQueries().fooTotal(); 
    return new JsonResult 
     { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = fooresults }; 
} 

是否有使用回內容,而不是JsonResult的方法嗎?我對.NET MVC框架相當陌生,並且在尋找正確的方法時遇到了一些困難。

我目前的結果是格式如下:

[{ "foo", 3 }] 

相反,我寧願讓純文本,這樣我可以使用AJAX請求到3的值傳遞到一個輸入元素值=「」字段。

AJAX調用我與控制器使用:

$.ajax({ 
    type: 'GET', 
    url: $('#fooValue').data('url'), 
    success: function (data) { 
     $('#fooValue').val(data); 
    } 
}); 

數據-URL相當於:

../fooController/fooData 

我只是用T4MVC。

+0

爲什麼你就不能從deserialised JSON的foo的屬性設置輸入的值? – devdigital 2013-04-05 19:12:38

+0

舉個例子吧?我在JSON的新領域。這聽起來像是一個潛在的更好的解決方案,但參考或示例會有所幫助。謝謝。 – Alexander 2013-04-05 19:21:00

+0

想必您使用AJAX來調用返回JSON的控制器操作?你使用jQuery來執行AJAX調用嗎? – devdigital 2013-04-05 19:24:16

回答

1

返回ContentResult代替JsonResult

public virtual ContentResult gooData() 
{ 
    var fooresults = new fooQueries().fooTotal(); 
    return Content(fooresults); 
} 
0

您可以返回內容爲:

return Content(fooresults); 

但是這不會是乾淨的你分開元素作爲JSON回報。

0

我不知道的fooresults的形狀是什麼,但你應該能夠改變你的AJAX調用如下:

$.ajax({ 
    type: 'GET', 
    url: $('#fooValue').data('url'), 
    success: function (data) { 
    $('#fooValue').val(data.foo); 
    } 
}); 

如果jQuery的AJAX調用的數據類型屬性不顯式設置,那麼jQuery將嘗試根據MIME類型來推斷返回結果的類型,在您的情況下這將是JSON。因此jQuery會將JSON反序列化爲一個JSON對象。有關更多信息,請參閱http://api.jquery.com/jQuery.ajax/

+0

我會試試這個。我猜在JQuery API的某個地方,我可以找到如何使用.serialize或如果我需要將它帶到純文本類型?目前輸出是一個JSON對象,所以它看起來像value =「[Object object]」,我可以改變它?謝謝。 – Alexander 2013-04-05 19:48:37

+0

爲了序列化和反序列化JSON,分別使用JSON.stringify和JSON.parse。它們在所有現代瀏覽器上本地支持,但建議無論如何使用JSON-js庫(https:// github。com/douglascrockford/JSON-js),因爲如果功能不可用,它將增加對舊瀏覽器的支持。 – devdigital 2013-04-05 19:51:47

+0

我猜這是「更好」的作品。我將它改爲.val(data.PlainObject),但現在我只是獲得了value =「」,所以我沒有得到[Object,object]是好事,但是現在沒有任何東西被傳遞。有什麼想法嗎? – Alexander 2013-04-05 20:14:51

0

返回一個JSON,該方法應該改變如下:

public JsonResult fooData() 
{ 
    var fooresults = new fooQueries().fooTotal(); 
    return Json(fooresults , JsonRequestBehavior.AllowGet);  
}