【问题标题】:How to return View to ajax request in MVC?如何将视图返回到 MVC 中的 ajax 请求?
【发布时间】:2026-01-18 12:40:01
【问题描述】:

如果我有一个简单的局部视图:

    @if (Model != null)
{
    if (Model.Count() != 0)
    {
        foreach (var item in Model)
        {
            <li class="list-group-item list-group-item-success">
                <div class="row">
                    <div class="col-lg-4">@item.FullName</div>
                    <div class="col-lg-4">@Resource.Price @item.SalesPrice</div>
                    <div class="col-lg-4"><div class="pull-right"><span class="glyphicon glyphicon-remove remove-glyph" aria-hidden="true"></span></div></div>
                </div>
            </li>
        }
    }
}

控制器代码:

[HttpPost]
public ActionResult ProductList(List<ProductViewModel> collection)
{

    return  PartialView("_ProductList", collection);
}

还有我的 ajax 请求:

$.ajax({
    url: actionUrl,
    contentType: "application/json; charset=utf-8",
    dataType: 'json, html',
    cache: false,
    data: JSON.stringify({ collection: temporarySelectedItems }),
    type: 'POST',
    traditional: true
}).done(function (data) {
    console.log(data)
});

我可以看到我的项目很好地序列化了,但是 .done 从不返回任何 html。

【问题讨论】:

  • 当你实际返回html时,为什么你的dataType期待json
  • 你可以简单地省略dataType,jQuery 会自动计算出来,所以即使你返回 JSON,你的 data 参数也会被相应地反序列化。

标签: ajax asp.net-mvc asp.net-mvc-3 model-view-controller


【解决方案1】:

ajax 调用看起来不错。只需修改您的控制器以返回 json 结果。

    [HttpPost()]
    public JsonResult ProductList(List<ProductViewModel> collection)
    {
        //Do something

        return Json(something);
    }

如果您还没有使用 JSON.NET,您也应该使用它。它非常适合从 JSON 的序列化/反序列化中解脱出来。

【讨论】: