我可以使用类将MVC程序中的json数据返回到我的视图吗?

时间:2012-09-16 13:02:14

标签: c# javascript asp.net-mvc json asp.net-mvc-3

我有以下代码:

return Json(new {
    entity = vm.Entity,
    errors = e.Message,
    field = vm.Field
});

如果我键入以下内容,它仍然可以正常编译,但在视图尝试读取数据时失败。

return Json(new {
    wrongspellingofentity = vm.Entity,
    errors = e.Message,
    field = vm.Field
});

有什么方法可以使用某种类来返回我的数据然后如果是这样我将如何在客户端上阅读这个。是否有一个javascript类可以用来接受那里的数据?

3 个答案:

答案 0 :(得分:0)

使用Anonymouse Type与使用类相同,因为编译器会将匿名类型创建为类。

简单地指定要转换为JSON的类将像现在一样工作,结果完全如此。

考虑:

return Json(new MyType{
     entity = vm.Entity,
     errors = e.Message
});

答案 1 :(得分:0)

如果您担心客户端没有选择更改服务器端的属性,那么使用C#类将无法提供帮助。 JavaScript本身不支持类,只要您传递有效的JSON,就没有理由抱怨。

您可以从C#程序集生成JavaScript伪类,并且在加载JSON数据时,将生成的JavaScript对象转换为其中一个类,并使用一种机制来使缺失或不正确的属性无效。这在技术上是可行的,但是,不知道你的意图,我不知道我是否建议在生成和解释JSON数据时遵守纪律。

答案 2 :(得分:0)

您可以向您的客户发送自定义视图模型(它只是一个POCO类)。

假设你有这样的课程

public class CustomerInfo
{
  public string Name { set;get;}
  public int Age { set;get;}
}

你可以从你的Action方法中返回它

public Actionresult GetCustomerInf()
{
 var cm=new CustomerInfo();
 cm.Name="Some Name";
 cm.Age=23;
 return Json(cm,JsonRequestBehaviour.AllowGet);
}

这将返回JSON这样的

{  "Name":"Some Name", "Age":"23" }

要从客户端javascript访问此功能,您可以使用getJSON方法。

$.getJSON("@Url.Action("GetCustomerInfo","YourController")",function(data){
  //now you can parse through the JSON result we received back
  alert(data.Name);
  alert(data.Age);
});

如果从action方法返回复杂类型,则可以获取JSON结构并更改解析结果的代码。

jsonlint.com是一个有用的网站,可帮助您在使用JSON时验证结构。