Asp.net 我可以将ViewBag属性返回到Ajax成功回调吗?

Asp.net 我可以将ViewBag属性返回到Ajax成功回调吗?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我正在从ajax调用一个MVC控制器。控制器应返回名为Counter的ViewBag属性: public ActionResult GetSomething() { var someModel = ... ViewBag.Counter = 5; return PartialView("SomePartialView", someModel); } 我通过ajax调用控制器。我想要的是在ajax成功回调中访问名为Counter的ViewBag属性。这可能吗 $.aj

我正在从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:从控制器返回模型中的计数器不是一个选项。必须在可视包中

更新:

用一个返回值更新了控制器,让您知道我不能以Json格式返回计数器

解决方案:

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

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

    return Json(new { pViewHtml = HtmlHelpers.RenderViewToString(this.ControllerContext, "SomePartialView", someModel), counter = 5 });
}
它现在返回我的部分变量的html,以及我的计数器变量

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

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

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

请像这样使用您的操作返回语法

return Json(new { success = ViewBag.Counter }, JsonRequestBehavior.AllowGet);
在你的观点上得到这样的回应

success: function (data) {
                     alert(data.success); 
                       },

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

一种选择是:

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

在ajax.success中,引入两个额外的参数
status
xhr
,使success函数如下所示:

success:函数(数据、状态、xhr){


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

否。只需使用
返回Json(5);
并且
日期的值将是5。您想在返回的部分视图中使用ViewBag.Counter吗?不,我需要ViewBag.Counter,用于部分视图之外的内容。@brinch-好的。然后可以在部分视图的隐藏字段中设置计数器值,并在ajax成功中访问该值。@brinch,如果需要,进行两个ajax调用-一个用于重新调用当你把它添加到DOM时,把它放在一个隐藏的输入中,并从输入中读取它。你也可以直接传递你的计数器值,而不是VIEWBACK.Real.@ BrCouth-你可以将计数器与模型一起传递给部分视图。@ Ajter:不,这不是一个选项,因为我将使用PAR以外的计数器。tial view.you刚才更改了您的问题,我将为您提供一个答案plz wait如果您想访问ajax success中的某些内容,您必须更改返回类型。
success: function (data) {
                     alert(data.success); 
                       },