每次点击View
中的链接并在ActionResult
中调用Controller
方法时,我都需要增加session
变量的值,但是它不起作用。
当我开始时,该值为17,当我点击链接并将1传递给Controller
时,我希望结果为18,下次单击时应为19。
但是我做错了什么以及如何改进代码呢?该值是ActionResult
中的可空int。
public ActionResult Index(int? value) {
// Session
if (Session["week"] == null)
{
// Create session
Session["week"] = week.WeekNum();
}
if (!value.HasValue)
{
weekStart = (int)Session["week"];
}
else
{
Session["week"] = + value;
weekStart = (int)Session["week"];
}
ViewBag.weekNumber = weekStart;
... the rest of the code...
}
答案 0 :(得分:1)
您可以像增加任何其他数据源一样增加值:
这可能是一件简单的事情:
var weekValue = int.Parse(Session["week"].ToString());
weekValue += value;
Session["week"] = weekValue;
如果会话变量可能不是有效整数,则可以使用int.TryParse()
或其他方法检查该条件。
或者为了避免使用.ToString()
次调用,如果该值的错误可能性小到足以首先使用int.Parse()
,那么我想您也可以使用此功能:< / p>
var weekValue = Convert.ToInt32(Session["week"]);
对输入类型有点宽容,因为它有许多重载。
答案 1 :(得分:1)
我建议编写辅助函数来执行增量,例如
private void IncrementWeeks(int weeks)
{
if (Session["week"] == null)
{
Session["week"] = week.WeekNum();
return;
}
int currentWeek = 0;
if (int.TryParse(Session["week"].ToString(), out currentWeek))
{
Session["week"] = (currentWeek + weeks).ToString();
}
}
仅涵盖NULL
检查和int
转化问题。
以下是如何将会话中的值包装到辅助函数中:
private int ReadWeekFromSession()
{
if (Session["week"] == null)
{
return 0;
}
int currentWeek = 0;
if (int.TryParse(Session["week"].ToString(), out currentWeek))
{
}
return currentWeek;
}
例如:
public ActionResult Index(int? value)
{
int weekStart = 0;
if (!value.HasValue)
{
weekStart = ReadWeekFromSession();
}
else
{
IncrementWeeks(value.Value);
weekStart = ReadWeekFromSession();
}
// Rest of controller code....
}