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