【问题标题】:Creating a shared property available in all method across controller C#创建跨控制器 C# 的所有方法中可用的共享属性
【发布时间】:2017-05-05 19:39:54
【问题描述】:

我正在尝试在我的 C# 控制器中实现一个共享属性,我已将其定义如下:

public string guid;
    public string _gu_id
    {
        get { return guid; }
        set { guid = value; }
    }

public ActionResult ActionFirst()
{
 _gu_id = something...;
}

public ActionResult ActionSecond()
{
// checking now if the _gu_id is !=null
if(_gu_id!=null)
// do something here
}

像这样,该属性在第一个操作中设置,但其值在第二个操作中不可用...

我可以将其声明为静态,但这不是解决方案,因为在 web 中应避免使用静态变量.. ?

编辑:更详细地解释问题:

当属性 _gu_id 在第一个 ActionFirst 方法中设置时,我需要能够在 ActionSecond 方法中获取它的值,而不使用静态变量...

【问题讨论】:

  • XY 问题。您有一个问题,您认为解决方案是“在我的控制器中创建一个成员变量”。解释你试图解决的问题,因为控制器是根据请求创建的。您可能需要在会话、令牌、标头或其他地方存储一些内容。
  • @CodeCaster 问题如下:在第一种方法中设置时,变量 GUID 需要在第二种方法中可用...我提到我可以为此使用静态变量,但我避免使用因为我和他们有过非常不愉快的经历......
  • @CodeCaster 因此,在第一种方法中设置 _gu_id 变量时,当调用第二种方法时,我需要在第二种方法中设置第一种方法中设置的 _gu_id 值...
  • “变量 GUID 需要在第二种方法中可用” - 然后将其粘贴到会话、数据库中,或将其传递给用户让他们返回第二个请求。
  • @CodeCaster 好的,会话似乎是最好的解决方案,谢谢! :)

标签: c# asp.net asp.net-mvc asp.net-mvc-4 static


【解决方案1】:

如果您避免使用持久会话变量(通常是个好主意),MVC 还提供 TempData 用于在重定向之间挂起数据。

【讨论】:

  • 你的意思是像 TempData["Key"] ?
【解决方案2】:

每当您重定向到新控制器的新操作方法时,这是一个新请求,您不能像您正在寻找的方式那样保留从一个请求到另一个请求的值。

宁可像这样使用 Session 变量。

Session["guid"] = "YourValue";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多