我想要一些关于解决我遇到的问题的正确设计模式或方法的建议。
基本上,在 MVC3 中,我有一个控制器,它具有多个操作,所有操作都简单地生成表数据。大多数(但不是全部)操作应该有一个可选的年份值,用于根据选定的年份过滤结果。目前,我通过查询字符串接受年份值,但如果未提供(或无效)则默认为当前年份。
我正在考虑创建简单的操作方法,该方法允许用户通过选择列表更改年份,将所选值(和当前页面)发布到将所选年份设置为会话变量(验证后)的操作并重定向用户回到他们所在的页面。然后对于所有后续请求,在控制器构造函数中,我将从会话变量中读取年份并将其存储在一个局部变量中,然后可以在每个操作中使用该局部变量。
但是,我犹豫要不要采用这种方法,因为有很多参考资料(很多在这个网站上)警告在控制器构造函数中使用会话变量。我可以继续在每个方法中将年份作为查询字符串参数传递,但以下是来自一个操作的代码片段,显示了我如何验证今年,并且在每个操作中复制它似乎违反了 DRY 原则。关于如何做到这一点的任何建议?
public ActionResult FundsAppropriationList(int? year = null)
{
var fundsAppropriationListModel = new FundsAppropriationListModel();
if (year != null && year >= 2000 && year <= 2099)
{
fundsAppropriationListModel.SelectedYear = (int)year;
}
else
{
fundsAppropriationListModel.SelectedYear = DateTime.Now.Year;
}
fundsAppropriationListModel.AvailableYearsList = new SelectList(_grantReviewServices.GetYearsForWhichReviewsExist().Select(x => new {value = x, text = x}), "value", "text");
//... Remainder of model population here...
return PartialView("_FundsAppropriationList", fundsAppropriationListModel);
}