2013-05-19 4 views
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))); 
    } 

ответ

6

Каждый запрос, который вы создаете для нового экземпляра контроллера, будет создан, поэтому вы не делитесь данными между запросами. Там несколько вещей, которые вы можете сделать, чтобы сохранить данные:

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

Следующий метод очень прост и гарантирует, что переменная привязана к текущему пользователю, а не используется во всем приложении. Все, что вам нужно сделать, это ввести следующий код в контроллере:

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

и всякий раз, когда вы хотите использовать эту переменную, например, вы хотите, чтобы дать ему в качестве параметра метода, просто введите этот:

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

Вот как сохранить и использовать переменную в ASP.NET MVC

Смежные вопросы