2013-04-05 81 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);  
}