我在PostBack期间丢失ViewBag函数指针值时出现问题。
我的网站有一个横幅(部分视图),我使用ViewBag函数指针指示客户的状态:
ViewBag.CustomerStatus= new Func<id, string>(GetCustomerStatus);
(其中id是我的客户ID,返回的字符串是返回状态)
当我开始使用横幅局部视图的其他页面时,我松开了CustomerStatus ViewBag变量。我知道ViewBags只能“按页面”使用,但是如何在应用程序的其他位置提供我的客户状态功能,而不会多余并重复ViewBag.CustomerStatus = new Func(GetCustomerStatus);在每个ActionMethod调用?
是否可以在Session / ViewState中存储函数指针?安全吗? 如何在回发中访问我的最新客户状态?
提前谢谢。
答案 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)方法返回相同的横幅但是客户状态变量可用。
希望不要混淆和帮助别人。