【发布时间】:2012-04-28 22:32:04
【问题描述】:
我看过一些文章(甚至是 MSDN)建议使用 TempData 在 ActionMethods 之间传递数据。但是我在这里看到其他人说应该避免使用 TempData。解决此问题的最佳做法是什么?
这里有一些代码来显示我的情况。 注意:我 100% 确定,我做错了。这就是我在这里的原因。 :) 另外,我最近一直在做 Webforms。
注2:This is related, but not the same.
查看:
<div>
@using (Html.BeginForm("Previous", "Home", new {month = @month}, FormMethod.Post))
{
<input id="previous" type="submit" value="Previous" />
}
// This fails but that's another situation
@using (Html.BeginForm("Next", "Home", new {month = @month, year = @year}, FormMethod.Post))
{
<input id="next" type="submit" value="Next" />
}
</div>
控制器方法:
[HttpPost]
public ActionResult Previous(HTMLMVCCalendar.Models.MonthModel prevMonth)
{
Calendar monthEventsCal = new Calendar();
int month = prevMonth.Month;
int year = prevMonth.Year;
var newMonth = monthEventsCal.previousMonth(year, month);
month = newMonth.Item2;
year = newMonth.Item1;
return RedirectToAction("Index", "Home", new { month = month });
}
[HttpPost]
public ActionResult Next(HTMLMVCCalendar.Models.MonthModel nextMonth)
{
Calendar monthEventsCal = new Calendar();
int month = nextMonth.Month;
int year = nextMonth.Year;
var newMonth = monthEventsCal.nextMonth(year, month);
month = newMonth.Item2;
year = newMonth.Item1;
return RedirectToAction("Index", "Home", new { year = year, month = month });
}
【问题讨论】:
-
定义您需要共享的数据类型(以及如何共享),我们可以建议比
TempData更好的替代方案,因为它作为一种良好的数据传输机制并不可靠。 -
索引加载日历及其事件。 Previous 和 Next 按钮需要将月份和年份(例如:4 和 2012)发送到 Previous 和 Next 操作方法。他们反过来计算所需的月份和年份,并将其传递给 Index actionmethod。
-
请看这个,它可能对你有帮助,stackoverflow.com/questions/7993263/…
标签: c# asp.net-mvc asp.net-mvc-3 redirecttoaction tempdata