我想在控制器中保存一个变量,以便能够将它用于所有方法,所以我声明了3个私有字符串
public class BankAccountController : Controller
{
private string dateF, dateT, accID;
//controller methods
}
现在这个方法改变了它们的值:
[HttpPost]
public ActionResult Filter(string dateFrom, string dateTo, string accountid)
{
dateF = dateFrom;
dateT = dateTo;
accID = accountid;
//rest of the code
}
我使用断点并且当我调用该控制器方法时变量正在被更改,但是当我调用其他控制器方法(如下所示)时,私有字符串被重置为emtpy字符串,我该如何防止它发生?< / p>
public ActionResult Print()
{
return new ActionAsPdf(
"PrintFilter", new { dateFrom = dateF, dateTo = dateT, accountid = accID }) { FileName = "Account Transactions.pdf" };
}
public ActionResult PrintFilter(string dateFrom, string dateTo, string accountid)
{
CommonLayer.Account acc = BusinessLayer.AccountManager.Instance.getAccount(Convert.ToInt16(accID));
ViewBag.Account = BusinessLayer.AccountManager.Instance.getAccount(Convert.ToInt16(accountid));
ViewBag.SelectedAccount = Convert.ToInt16(accountid);
List<CommonLayer.Transaction> trans = BusinessLayer.AccountManager.Instance.filter(Convert.ToDateTime(dateFrom), Convert.ToDateTime(dateTo), Convert.ToInt16(accountid));
ViewBag.Transactions = trans;
return View(BusinessLayer.AccountManager.Instance.getAccount(Convert.ToInt16(accountid)));
}
答案 0 :(得分:7)
您创建控制器新实例的每个请求都将被创建,因此您的数据不会在请求之间共享。您可以采取一些措施来保存数据:
Session["dateF"] = new DateTime(); // save it in the session, (tied to user)
HttpContext.Application["dateF"] = new DateTime(); // save it in application (shared by all users)
您可以以相同的方式检索值。当然,您也可以将其保存在其他地方,最重要的是,控制器实例不是共享的,您需要将其保存在其他地方。
答案 1 :(得分:1)
以下方法非常简单,并确保变量与当前用户绑定,而不是在整个应用程序中使用。您需要做的就是在控制器中键入以下代码:
Session["dateF"] = dateFrom;
Session["dateT"] = dateTo;
Session["accID"] = accountid;
并且每当您想要使用该变量时,例如您想将其作为参数提供给方法,只需输入:
MyMethod(Session["dateF"].ToString());
这就是在ASP.NET MVC中保存和使用变量的方法
答案 2 :(得分:0)
您可以在控制器中使用静态字段,以便在所有请求之间共享。
private static List<someObject> yourObjectList;