1

我在回发期间丢失了 ViewBag 函数指针值的问题。

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

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

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

当我开始访问使用横幅局部视图的其他页面时,我失去了我的 CustomerStatus ViewBag 变量。我知道 ViewBags 仅“每页”可用,但我怎样才能使我的客户状态功能从应用程序的其他地方可用,而不会冗余和重复 ViewBag.CustomerStatus= new Func(GetCustomerStatus); 在每一个 ActionMethod 调用上?

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

先感谢您。

4

2 回答 2

3

从架构上讲,这有一些地方让我很反感。您不应该将函数调用传递给您的视图,而应该传递data。您的方法违反了 MVC 所倡导的“关注点分离”。

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

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

于 2012-04-16T18:45:34.353 回答
2

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

我没有直接渲染局部视图,而是对其进行了更改,因此通过控制器的 Action 方法调用它。

我建立:

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

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

希望这不会令人困惑并对其他人有所帮助。

于 2012-04-17T20:02:13.957 回答