gpt4 book ai didi

c# - jQuery AJAX 命中 Controller 操作但返回空字符串而不是部分 View

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:36 24 4
gpt4 key购买 nike

我已经多次使用此设置,但不明白为什么它在这里不起作用。本质上,对 Controller 的调用似乎有效,但返回一个空字符串,而不是部分 HTML。

我可以像这样渲染部分所以猜测它不是 View 本身:

@{
Html.RenderPartial("_MyPartial")
}

这是干净的 AJAX 代码,它是在文档准备好并调用 Controller 时从父 razor View 调用的:

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/>');
}
});

这是 Controller :

   [HttpPost]
public ActionResult ReportModels()
{
var viewModel = new ViewModel(); // props get set in original code

return PartialView("_MyPartial", viewModel);
}

最佳答案

从您的 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();
}
}

关于c# - jQuery AJAX 命中 Controller 操作但返回空字符串而不是部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34414475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com