我试图创建控制器动作,根据参数返回JSON或部分html。异步将结果返回到MVC页面的最佳方法是什么?
当前回答
我认为您应该考虑请求的AcceptTypes。我在我当前的项目中使用它来返回正确的内容类型,如下所示。
你在控制器上的动作可以像在请求对象上一样测试它
if (Request.AcceptTypes.Contains("text/html")) {
return View();
}
else if (Request.AcceptTypes.Contains("application/json"))
{
return Json( new { id=1, value="new" } );
}
else if (Request.AcceptTypes.Contains("application/xml") ||
Request.AcceptTypes.Contains("text/xml"))
{
//
}
然后,您可以实现视图的aspx来满足部分xhtml响应的情况。
然后在jQuery中,你可以将类型参数作为json来获取它:
$.get(url, null, function(data, textStatus) {
console.log('got %o with status %s', data, textStatus);
}, "json"); // or xml, html, script, json, jsonp or text
其他回答
对于已经升级到MVC 3的人来说,这是一个很好的方法 使用MVC3和Json
另一种处理JSON数据的好方法是使用JQuery getJSON函数。你可以致电
public ActionResult SomeActionMethod(int id)
{
return Json(new {foo="bar", baz="Blech"});
}
方法从jquery getJSON方法简单…
$.getJSON("../SomeActionMethod", { id: someId },
function(data) {
alert(data.foo);
alert(data.baz);
}
);
public ActionResult GetExcelColumn()
{
List<string> lstAppendColumn = new List<string>();
lstAppendColumn.Add("First");
lstAppendColumn.Add("Second");
lstAppendColumn.Add("Third");
return Json(new { lstAppendColumn = lstAppendColumn, Status = "Success" }, JsonRequestBehavior.AllowGet);
}
}
我认为您应该考虑请求的AcceptTypes。我在我当前的项目中使用它来返回正确的内容类型,如下所示。
你在控制器上的动作可以像在请求对象上一样测试它
if (Request.AcceptTypes.Contains("text/html")) {
return View();
}
else if (Request.AcceptTypes.Contains("application/json"))
{
return Json( new { id=1, value="new" } );
}
else if (Request.AcceptTypes.Contains("application/xml") ||
Request.AcceptTypes.Contains("text/xml"))
{
//
}
然后,您可以实现视图的aspx来满足部分xhtml响应的情况。
然后在jQuery中,你可以将类型参数作为json来获取它:
$.get(url, null, function(data, textStatus) {
console.log('got %o with status %s', data, textStatus);
}, "json"); // or xml, html, script, json, jsonp or text
在action方法中,返回Json(object)将Json返回到页面。
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
然后使用Ajax调用action方法。您可以使用ViewPage中的一个辅助方法,例如
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
SomeMethod将是一个javascript方法,然后计算返回的Json对象。
如果你想返回一个普通的字符串,你可以使用ContentResult:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ContentResult默认返回一个文本/纯文本作为它的contentType。 这是可重载的,所以你还可以做:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
推荐文章
- ASP中基于角色的访问控制(RBAC)与基于声明的访问控制(CBAC)NET MVC
- 查询JSON类型内的数组元素
- jQuery:执行同步AJAX请求
- 带有空模型的Renderpartial传递了错误的类型
- 将JSON字符串转换为HashMap
- 将JsonNode转换为POJO
- MVC4数据类型。日期编辑器不会在Chrome中显示日期值,在Internet Explorer中没问题
- Json_encode()转义正斜杠
- 如何指定最小值,但没有使用范围数据注释属性的最大小数?
- 在EF中更新父实体时如何添加/更新子实体
- 如何写一个JSON文件在c# ?
- 在序列化和反序列化期间JSON属性的不同名称
- 无法加载文件或程序集“System.Web.Mvc”
- 从控制器内获得控制器和动作名称?
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?