0

我想在控制器中保存一个变量以便能够将它用于所有方法,所以我声明了 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
}

我使用了断点,并且在调用该控制器方法时正在更改变量,但是当我调用其他控制器方法时,例如私有字符串下面的这些方法被重置为空字符串,我该如何防止它发生?

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)));
    }
4

3 回答 3

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)

您可以以相同的方式检索值。当然,你也可以将它保存在其他地方,最重要的是,控制器实例不共享,你需要将它保存在其他地方。

于 2013-05-19T12:56:17.020 回答
1

以下方法非常简单,并确保变量与当前用户相关联,而不是在整个应用程序中使用。您需要做的就是在控制器中输入以下代码:

Session["dateF"] = dateFrom;
Session["dateT"] = dateTo;
Session["accID"] = accountid;

并且每当您想使用该变量时,例如您想将其作为方法的参数提供,您只需输入以下内容:

MyMethod(Session["dateF"].ToString());

这就是在 ASP.NET MVC 中保存和使用变量的方式

于 2017-05-16T13:52:27.640 回答
0

您可以在控制器中使用静态字段,以便在所有请求之间共享。

private static List<someObject> yourObjectList;

于 2019-07-11T22:17:18.060 回答