Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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#_Model View Controller_Session_Postback_Viewbag - Fatal编程技术网

C# 回发后保留ViewBag值

C# 回发后保留ViewBag值,c#,model-view-controller,session,postback,viewbag,C#,Model View Controller,Session,Postback,Viewbag,我有一个问题,ViewBag函数指针值在回发过程中丢失 我的网站有一个横幅(局部视图),我在横幅中利用ViewBag功能指针指示客户的状态: ViewBag.CustomerStatus= new Func<id, string>(GetCustomerStatus); ViewBag.CustomerStatus=新函数(GetCustomerStatus); (其中id是我客户的id,返回字符串是返回状态) 当我开始转到使用banner部分视图的其他页面时,我松开了Custo

我有一个问题,ViewBag函数指针值在回发过程中丢失

我的网站有一个横幅(局部视图),我在横幅中利用ViewBag功能指针指示客户的状态:

ViewBag.CustomerStatus= new Func<id, string>(GetCustomerStatus);
ViewBag.CustomerStatus=新函数(GetCustomerStatus);
(其中id是我客户的id,返回字符串是返回状态)

当我开始转到使用banner部分视图的其他页面时,我松开了CustomerStatus ViewBag变量。我知道ViewBag仅“每页”可用,但我如何使我的客户状态功能在应用程序中的其他位置可用,而不重复ViewBag。CustomerStatus=new Func(GetCustomerStatus);在每个ActionMethod调用上

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


提前谢谢你。

从架构上讲,这件事让我感到不舒服。您不应该向视图传递函数调用,而应该传递数据。您的方法违反了MVC支持的“关注点分离”

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


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

从架构上讲,这一点让我感到不安。您不应该向视图传递函数调用,而应该传递数据。您的方法违反了MVC支持的“关注点分离”

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


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

我最终采用了以下方法

我没有直接渲染局部视图,而是将其更改为通过控制器的动作方法调用

我创建了:

 public PartialViewResult CustomerStatus()
 {
  ...here I called my private GetCustomerStatus methods
  ViewBag.CustomerStatus = GetCustomerStatus();
  Return PartialView("
 }
因此,现在,无论何时必须呈现标题横幅,而不是@Html.Partial(“BannerPartialView”),我都会调用@Html.Action(CustomerStatus)方法,该方法返回相同的横幅,但客户状态变量可用


希望它不会让人困惑,并对其他人有所帮助。

我最终采取了以下方法

我没有直接渲染局部视图,而是将其更改为通过控制器的动作方法调用

我创建了:

 public PartialViewResult CustomerStatus()
 {
  ...here I called my private GetCustomerStatus methods
  ViewBag.CustomerStatus = GetCustomerStatus();
  Return PartialView("
 }
因此,现在,无论何时必须呈现标题横幅,而不是@Html.Partial(“BannerPartialView”),我都会调用@Html.Action(CustomerStatus)方法,该方法返回相同的横幅,但客户状态变量可用


希望这不会让人困惑,也不会对其他人有所帮助。

是的,你完全正确。ViewBag函数指针确实打破了整个层分离逻辑,但我被分配到这个项目,该项目已经在所有地方实现了这些ViewBag控制器函数指针,所以我按照流程进行了。无论如何,banner局部视图已经有了一个模型,它正在从中提取数据。我想我不能用我自己的新型号来代替它。我不认为有办法将二级模型传递给视图,是吗?这就是为什么我认为会话指针是最好的方法。你的想法是什么?那么也许你最好的办法就是把函数指针返回的值塞进ViewBag?是的,你完全正确。ViewBag函数指针确实打破了整个层分离逻辑,但我被分配到这个项目,该项目已经在所有地方实现了这些ViewBag控制器函数指针,所以我按照流程进行了。无论如何,banner局部视图已经有了一个模型,它正在从中提取数据。我想我不能用我自己的新型号来代替它。我不认为有办法将二级模型传递给视图,是吗?这就是为什么我认为会话指针是最好的方法。你的想法是什么?那么也许你最好的办法就是把函数指针返回的值塞进ViewBag?