6

什么时候在 ASP.NET MVC 3 应用程序中使用 JsonResult 操作?

通常从哪里调用 JsonResult;来自另一个动作或 html 中呈现的动作链接?

你能给我一些你想要json而不是典型视图的例子吗?

4

5 回答 5

4

比方说,例如,您想使用基于另一个字段选择的值列表填充 jQuery 自动完成,因此您无法确定页面加载时的数据。我通常会在调用中调用一个操作方法$.ajax,然后返回一个项目数组来填充自动完成功能。

例如,这是我的 jQuery,一个用于调用的函数,另一个用于使用接收到的数据填充 automcomplete 的函数:

$(function() {
    $.ajax({
            url: '@Url.Action("GetHomes", "Account")',
            type: "POST",
            datatype: "json",
            success: function (data) {
                if (data.Success || data.Success == null) {
                    WireUpHomesData(data);
                } else {
                    ShowErrorDialog();
                }
            }
        });

    ShowDialog();
});

function WireUpHomesData(data) {
    var homes = new Array();

    for (var i = 0; i < data.length; i++) {
        homes[i] = { label: data[i].HomeName, text: data[i].HomeId, icon: data[i].HomeIcon, desc:data[i].HomeAddress };
    }
    $("#home").autocomplete({
            source: homes,
            select: function (event, item) {
                homeUrl = '@Url.Action("Site", "Sites")/' + item.item.text;
            }
        }).data("autocomplete")._renderItem = function (ul, item) {
        return $("<li></li>")
            .data("item.autocomplete", item)
            .append("<a><span class='" + item.icon + "'/><span class='fs-ui-autocomplete-home'>" + item.value + "</span><br>" + item.desc+ "</a>")
            .appendTo(ul);
    }; 
    $(".ui-autocomplete").addClass("fs-ui-autocomplete");
}

这是我的控制器:

public JsonResult GetHomes()
{
    return Json(RequiresAclAttribute.HomesForUser());
}

这是被调用方法的方法签名:

public IEnumerable<HomeInfo> HomesForUser()

为了清楚起见,这里是HomeInfo类:

public class HomeInfo
{
    public string HomeId { get; set; }
    public string HomeName { get; set; }
    public string DisplayName { get; set; }
    public string HomeAddress { get; set; }
    public string HomeIcon { get; set; }
}
于 2012-05-16T19:20:31.700 回答
3

JsonResult 是从类派生的子ActionResult类。当你想返回一个 Json 对象时,你可以使用它。

public JsonResult GetItems()
{
  var jsonResult=new { Id = "23", Name = "Scott"};
  return Json(jsonResult,JsonBehaviour.AllowGet);
}

这将返回与

public ActionResult GetItems()
{
  var jsonResult=new { Id = "23", Name = "Scott"};
  return Json(jsonResult,JsonBehaviour.AllowGet);
}

可能的用途是以异步方式获取一些数据块。例如:假设您有一个显示州的下拉菜单,当用户选择一个州时,您希望将属于该州的城市列表显示在页面中,而无需页面刷新。您可以调用使用 jQuery ajax /getJson 方法(jQuery get 以 json 作为数据类型的简写)方法从ActionMethod返回数据的方法中获取此Json数据。

一个调用返回 Json 数据的 Action 方法的小例子

$(function(){
   $.getJSON('YourController/GetItems', function(data) {
      alert(data.Id);
      alert(data.Name );
   });
});

对于 JsonResult 类,application/json如果没有明确指定,则响应内容类型将为“”。内部 返回数据时用于序列化内容的ExecuteResult方法。JavaScriptSerializer

于 2012-05-16T19:23:30.583 回答
1

JsonResult 在从 javascript 进行 ajax 调用时非常有用,例如使用 jQuery 中的 getJSON:http: //api.jquery.com/jQuery.getJSON/

JsonResult 的好处是它可以毫不费力地返回 JSON 格式的结果。

于 2012-05-16T19:22:39.530 回答
0

来自不涉及整个页面加载的客户端脚本的 Ajax 请求。基本上。

于 2012-05-16T19:19:42.543 回答
0

Whenever there is client side processing and client need that data use jsonresult like in autofill or remote validation

于 2016-09-06T13:55:01.907 回答