gpt4 book ai didi

asp.net - 我可以将 ViewBag 属性返回给 Ajax 成功回调吗?

转载 作者:行者123 更新时间:2023-12-02 12:05:57 24 4
gpt4 key购买 nike

我正在从 ajax 调用 MVC Controller 。 Controller 应该返回一个名为 Counter 的 ViewBag 属性:

public ActionResult GetSomething()
{
var someModel = ...

ViewBag.Counter = 5;

return PartialView("SomePartialView", someModel);
}

我通过ajax调用 Controller 。我想要的是访问 ajax 成功回调中名为 Counter 的 ViewBag 属性。这可能吗?

$.ajax({
type: "POST",
url: "/GetSomething",
content: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// How can I access Counter from here
},
});

PS:无法从 Controller 返回模型中的计数器。必须位于 ViewBag 中。

更新:

用返回值更新了 Controller ,让您知道我无法以 Json 形式返回计数器。

解决方案:

我最终像这样重写了我的 Controller :

public JsonResult GetHeaderBasketPreview()
{
var someModel = ...

return Json(new { pViewHtml = HtmlHelpers.RenderViewToString(this.ControllerContext, "SomePartialView", someModel), counter = 5 });
}

它现在返回我的部分的 html 以及我的计数器变量。

RenderViewToString 看起来像这样(我在 stackoverflow 上的答案中找到了这个辅助方法 - 但不记得在哪里):

public static string RenderViewToString(ControllerContext context, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = context.RouteData.GetRequiredString("action");

var viewData = new ViewDataDictionary(model);

using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
var viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw);
viewResult.View.Render(viewContext, sw);

return sw.GetStringBuilder().ToString();
}
}

我现在可以在 ajax 成功回调中访问这两个变量:

success: function (data, status, xhr) {
$('#somePartialView').html(data.pViewHtml);
$('#counterIndicator').html(data.counter);
}

最佳答案

这是不可能的,因为数据参数只是一个 HTML 字符串,它是在执行 PartialView("SomePartialView", someModel)

时生成的

其中一个选项如下:

在 Controller 操作中添加 Response.Headers["Counter"] = 5

在 ajax.success 中,接受两个额外参数 statusxhr,以便您的 success 函数如下所示:

成功:函数(数据、状态、xhr){

在此之后,您可以使用 xhr.getResponseHeader("Counter") 这将为您提供 5 (或您选择传入的任何内容)

关于asp.net - 我可以将 ViewBag 属性返回给 Ajax 成功回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37460852/

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