Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Viewbag未更新_C#_Asp.net_Ajax_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# Viewbag未更新

C# Viewbag未更新,c#,asp.net,ajax,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Ajax,Asp.net Mvc,Asp.net Mvc 5,目前,我有一些内联javascript,它对一个局部视图控制器进行ajax调用,该控制器应该同时更新viewbag。然而,情况似乎并非如此,数据似乎在主视图中保持不变,该视图为空,因为它从未在主视图中设置,如果已设置,则数据仍将保持不变(已测试) 这是我的javascript ajax调用 $.ajax({ url: btn.data('action-url'), data: { id: btn.data('id

目前,我有一些内联javascript,它对一个局部视图控制器进行ajax调用,该控制器应该同时更新viewbag。然而,情况似乎并非如此,数据似乎在主视图中保持不变,该视图为空,因为它从未在主视图中设置,如果已设置,则数据仍将保持不变(已测试)

这是我的javascript ajax调用

  $.ajax({
            url: btn.data('action-url'),
            data: {
                id: btn.data('id')
            },
            type: 'GET',
            success: function (data) {
                //delete all panels before showing new ones
                $('.panel.panel-default').remove();

                //push the new panels into the view
                //$('#dash-content').html(data);

                //Construct the partial view to be input into the main view

                //Checks to see if browser supports templates
                if ('content' in document.createElement('template')) {

                    var widgetModel = @Html.Raw(Json.Encode(ViewBag.widgets));

                    for (var i = 0; i < widgetModel.length; i++) {
                        var clone = loadwidgets(widgetModel[i]); //This function is in an external js file
                        var inputDestination = document.querySelector('#col2');
                        inputDestination.appendChild(clone);
                        console.log(inputDestination);
                    }
                }

添加一个操作以返回数据,即

  public ActionResult DashboardJson(int? id)
    {
        //get all widgets associated dashboard
        var getWidgetsQuery = (from widgets in db.widgets
                               where widgets.DashID == id
                               select widgets);

        var widgets = getWidgetsQuery;

        return Json(widgets, JsonRequestBehavior.AllowGet);
    }
在json调用上方声明并序列化模型,如下所示:

var widgetModel = @Html.Raw(Json.Encode(ViewBag.widgets));
然后在成功调用中,只需将其重新分配给返回的数据:

widgetModel = data;

Razor代码在发送到view-
@Html.Raw(Json.Encode(ViewBag.widgets))之前在服务器上进行解析
生成
ViewBag.widgets
(当页面第一次加载时)的初始值-它不会因为您进行了ajax调用(检查页面的视图源代码)而改变。您知道有没有办法解决这个问题吗?您可以返回Json和您想要使用的数据。并删除无意义的
ModelState.Clear():)Hi@hutchonoid应该将操作url更改为指向DashboardJson,然后?@Johnathon64是的,这样当您第一次加载页面时,您可以使用您的部分url。之后,您可以只使用原始数据,并且只返回所需的数据
widgetModel = data;