Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当通过JSON返回时,是否可以将模型传递到部分视图中?_C#_Ajax_Asp.net Mvc_Json - Fatal编程技术网

C# 当通过JSON返回时,是否可以将模型传递到部分视图中?

C# 当通过JSON返回时,是否可以将模型传递到部分视图中?,c#,ajax,asp.net-mvc,json,C#,Ajax,Asp.net Mvc,Json,在我的web应用程序中,用户可以单击列表项,然后该列表项将向控制器发送AJAX请求,控制器将返回一个JSON项目列表: return Json(new CategoryChildrenViewModel(){ CategoryItems = selectedCategoryItem.SubCategories }); 然后我有一个局部视图,用于列出返回的项目: @using Microsoft.AspNet.Identity; @mode

在我的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返回的列表中的每个项目传递到部分视图中,以便它可以呈现包含每个返回项目的详细信息的项目?

否,这将不起作用

当您返回JSON时,您将返回JSON,这是纯数据。您需要客户端代码Javascript来处理这些数据

包含部分视图的视图始终在服务器端执行,通常返回HTML

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

您可以尝试以下方法:

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);

}

执行html ajax调用并返回PartialViewName,选择CategoryItem,然后添加返回的内容,效果非常好。谢谢