如何在C#方法中设置全局变量

4
我尝试将currenturl赋值给SiteName(全局变量),但在切换到新方法时,SiteName(全局变量)会变为空。 有人可以帮忙吗?
public string SiteName;

public ActionResult Admin()
{
   string currentUrl = HttpContext.Request.Url.Segments.Last();

   SiteName = currentUrl;         

   return View();

}

3
您的变量并非真正的全局变量,而是公共类成员字段。为了实现您的目标,您可以将其声明为静态的:public static string SiteName;。我必须说,您的问题似乎表明您应该阅读有关类和对象的知识。 - Stefan
感谢您的指导。 - Udaya
感谢可以通过点赞和将答案标记为“已解决”来表达;-) - Stefan
3个回答

5

由于您正在使用 asp:,因此有一个 SessionApplication 对象可用于此目的:

public ActionResult Admin()
{
   string currentUrl = HttpContext.Request.Url.Segments.Last();

   //per session (let's say: per user)
   //you can read and write to this variable
   Session["SiteName"] = currentUrl;   

   //"global" variables: for all users
   HttpContext.Application["SiteName"] = currentUrl;

   return View();
}

只要您可以访问httpcontext,就可以在应用程序中的任何位置以同样的方式检索它。

public ActionResult Foo()
{
   //per session (let's say: per user)
   //you can read and write to this variable
   var currentUrl = Session["SiteName"];   

   //or

   //"global" variables: for all users
   currentUrl = HttpContext.Application["SiteName"];

   return View();
}

5

在 ASP.NET MVC 中使用全局变量并不是最佳实践。

我建议使用会话变量(Session variables)代替。

public ActionResult MyPage(PageData pageData)
{
   Session["SiteName"] = HttpContext.Request.Url.Segments.Last();
   return View();
}

你可以在另一个ActionResult中调用它

public ActionResult MyPage2(PageData pageData)
{
   var SiteName = Session["SiteName"].ToString();
   return View();
}

4

我认为你无法定义全局变量,但是你可以有静态成员

public static class MyStaticValues
{
   public static string currentUrl{get;set;}
}

然后您可以在代码的任何地方检索它:

String SiteName = MyStaticValues.currentUrl + value.ToString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接