加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:39:53 所属栏目:asp.Net 来源:网络整理
导读:我从ajax调用MVC控制器.控制器应该返回一个名为Counter的ViewBag属性: public ActionResult GetSomething(){ var someModel = ... ViewBag.Counter = 5; return PartialView("SomePartialView",someModel);} 我通过ajax调用控制器.我想要的是在ajax成功回调
我从ajax调用MVC控制器.控制器应该返回一个名为Counter的ViewBag属性:

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

    ViewBag.Counter = 5;

    return PartialView("SomePartialView",someModel);
}

我通过ajax调用控制器.我想要的是在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:从控制器返回模型中的计数器不是一种选择.必须在ViewBag中.

更新:

用一个返回值更新了控制器,让你知道,我不能在Json中返回Counter.

解:

我最终重写了我的控制器,如下所示:

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

解决方法

这不可能,因为数据参数只是在执行PartialView时生成的HTML字符串(“SomePartialView”,someModel)

一种选择如下:

在您的控制器操作中添加Response.Headers [“Counter”] = 5

在你的ajax.success中,接受两个额外的参数status和xhr,这样你的success函数如下所示:

成功:功能(数据,状态,xhr){

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读