我已多次使用此设置,但无法理解为什么它在这里不起作用。本质上,对控制器的调用似乎有效,但返回一个空字符串,而不是部分HTML。
我可以像这样呈现部分因此猜测它不是视图本身:
@{
Html.RenderPartial("_MyPartial")
}
这是干净的AJAX代码,从文档准备好的父剃刀视图调用并调用控制器:
var container = $("#container");
var controllerUrl = "some/url";
var data = {};
$.ajax({
type: 'POST',
url: controllerUrl,
data: data,
dataType: 'html',
cache: false,
success: function(html) {
// Return HTML to page
// html is empty string at this point???
container.html(html);
},
error: function(jqXhr, textStatus, errorThrown) {
// Error occured so return message to page
container.html('<p>An error has occurred</p><p>' + jqXhr + '<p/><p>' + textStatus + '<p/><p>' + errorThrown + '<p/>');
}
});
这是控制器:
[HttpPost]
public ActionResult ReportModels()
{
var viewModel = new ViewModel(); // props get set in original code
return PartialView("_MyPartial", viewModel);
}
答案 0 :(得分:0)
从你的ajax中删除字段dataType:'html'。并将此作为行动方法
[HttpPost]
public ActionResult ReportModels()
{
var partialView = RenderRazorViewToString("_MyPartial", new ViewModel(););
return Json(partialView);
}
public string RenderRazorViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View,
ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}