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