0

我在我的一个控制器上有这个方法来获取下拉列表:

public JsonResult GetPeople(int roleId)
{
    return Json(_uow.GetPeople(roleId).Select(e => new SelectListItem { Text = e.Name, Value = e.Id.ToString() }).ToList());
}

所以基本上它会在一个特定的角色中得到一大堆人,并在 json 中返回一个 selectlistitem 列表。

我不确定它是否应该用 [HttpGet] 或 [HttpPost] 装饰。我认为这应该是一个获取,因为这本质上就是您所做的,即使您确实发布了一个 ID,也可以从服务器获取信息。

所以它没有装饰,所以默认情况下是 GET。

这就是我在 jquery 中的调用方式:

$.get('/People/GetPeople', { roleId: $('#roleddl').val() }, function (data) {

    $(data).each(function () {
        $("<option value=" + this.Value + ">" + this.Text + "</option>").appendTo(peopleddl);
    });

});

所以在这里我使用 $.get。它没有用。所以我认为它正在返回 json,所以我尝试了 $.getJSON ,但没有成功。所以然后我尝试了 $.post ,它的工作原理是:

$.post('/People/GetPeople', { roleId: $('#roleddl').val() }, function (data) {

    $(data).each(function () {
        $("<option value=" + this.Value + ">" + this.Text + "</option>").appendTo(peopleddl);
    });

});

所以我想知道为什么当它调用的方法不是 POST 时,jquery post 调用会起作用。

即使这有效,我应该有什么组合。IE。该方法应该用什么装饰,我应该用什么来调用它?

4

1 回答 1

0

您需要修改您的 return 语句以允许返回 Json:

return Json(data, JsonRequestBehavior.AllowGet);

Json 通过 GET 响应返回时存在已知漏洞(更多信息请参见:http: //haacked.com/archive/2009/06/25/json-hijacking.aspx

于 2012-06-28T04:23:15.157 回答