回发后保持ViewBag值

时间:2012-04-16 18:31:15

标签: c# model-view-controller session postback viewbag

我在PostBack期间丢失ViewBag函数指针值时出现问题。

我的网站有一个横幅(部分视图),我使用ViewBag函数指针指示客户的状态:

ViewBag.CustomerStatus= new Func<id, string>(GetCustomerStatus);

(其中id是我的客户ID,返回的字符串是返回状态)

当我开始使用横幅局部视图的其他页面时,我松开了CustomerStatus ViewBag变量。我知道ViewBags只能“按页面”使用,但是如何在应用程序的其他位置提供我的客户状态功能,而不会多余并重复ViewBag.CustomerStatus = new Func(GetCustomerStatus);在每个ActionMethod调用?

是否可以在Session / ViewState中存储函数指针?安全吗? 如何在回发中访问我的最新客户状态?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

从架构上讲,有一些关于这一点的东西让我误解了。您不应该将函数调用传递给您的视图,您应该传递数据。你的方法违反了MVC所支持的“关注点分离”。

构造一个代表您要显示的数据的视图模型,然后通过调用您的函数来填充它(最好是从模型中,或者如果必须,从控制器中填充)。然后将模型传递给视图,让视图担心如何显示数据。

如果每次调用都有重复的数据,可以通过重写OnActionExecuting方法将其添加到模型中,并在此时将值添加到模型(或ViewBag)。

答案 1 :(得分:1)

我最终采取了以下方法......

不是直接渲染局部视图而是改变它,所以它是通过控制器的Action方法调用的。

我创建了:

 public PartialViewResult CustomerStatus()
 {
  ...here I called my private GetCustomerStatus methods
  ViewBag.CustomerStatus = GetCustomerStatus();
  Return PartialView("
 }

所以现在不是单独调用ViewBag函数指针,每当必须呈现标题横幅时,而不是@Html.Partial(“BannerPartialView”),我调用我的@Html.Action(CustomerStatus)方法返回相同的横幅但是客户状态变量可用。

希望不要混淆和帮助别人。