通过JSON返回时是否可以将模型传递到局部视图?

时间:2014-08-25 21:11:58

标签: c# ajax asp.net-mvc json

在我的Web应用程序中,用户可以单击列表项,然后该列表项将向控制器发送AJAX请求,然后控制器将返回JSON项目列表:

        return Json(new CategoryChildrenViewModel(){
            CategoryItems = selectedCategoryItem.SubCategories
        });

然后我有一个局部视图,将使用列出返回的项目:

@using Microsoft.AspNet.Identity;
@model Models.Category
<li class="treelistitem" data-id="@Model.CategoryId">
    <div>
    <i class="glyphicon glyphicon-folder-open rightfolderpadding"></i>@Model.CategoryName<span class="btn-group">
        @if (ApplicationSettings.Default.RoleAllowEditCategories!="None" && (User.IsInRole(ApplicationSettings.Default.RoleAllowEditCategories) || User.IsInRole("Administator")))
        {
        <a href="@Url.Action("Edit", "0")" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i>Edit</a>
        }
        @if (ApplicationSettings.Default.RoleAllowDeleteCategories != "None" && (User.IsInRole(ApplicationSettings.Default.RoleAllowDeleteCategories) || User.IsInRole("Administator")))
        {
        <a href="@Url.Action("Delete", "0")" class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-remove"></i>Delete</a>
        }
    </span>
    </div>
</li>

是否可以将JSON返回的列表中的每个项目传递到局部视图中,以便它可以呈现包含每个项目返回的详细信息的项目?

2 个答案:

答案 0 :(得分:0)

不,这不起作用。

返回JSON时,返回JSON,这是纯数据。您需要客户端代码(Javascript)才能对此数据执行有用的操作。

视图(包括部分视图)总是在服务器端执行,通常返回HTML。

您要做的是:发出AJAX请求,但不要返回JSON。相反,返回部分视图的ViewResult。这将执行服务器上的部分视图,您的AJAX调用者将收到一个HTML片段,然后您可以将其插入页面。

答案 1 :(得分:0)

你可以试试这个:

public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model)
{
if (ModelState.IsValid)
{
    if(Request.IsAjaxRequest()
        return PartialView("NotEvil", model);
    return View(model)
}
if(Request.IsAjaxRequest())
{
    return Json(new { error=true, message = RenderViewToString(PartialView("Evil",model)}));
}
return View(model);

}