asp.net mvc actionresult即使在页面刷新后仍保留参数值?

时间:2013-04-25 20:52:21

标签: asp.net-mvc asp.net-mvc-3

我在viewbag中设置错误消息,以便在每次回发后向用户显示我不想在页面重新加载或刷新时显示此错误消息。我试图将其设置为null但仍然显示,因为json参数仍包含第一次提交的值。

        [HttpPost]
        [CustomAuthorize(Definitions.RoleAnalystManager, Definitions.RoleProjectManager)]
        public ActionResult ExportReportAllMediaDetailsCsv(string json)
        {
            ViewBag.Error = null;

            var serializer = new JavaScriptSerializer();
            var reportParams = serializer.Deserialize<ReportAllMediaDetailsParams>(json);


            var rows = uow.Items.Report_AllMediaDetails(reportParams.profileID, reportParams.organisationID, reportParams.startDate, reportParams.endDate).ToList();

            if (rows.Count <= 1)
            {
                ViewBag.Error = "There were no results for the provided parameters, please adjust the parameters and try again.";
                return View("AllMediaDetails");
            }

1 个答案:

答案 0 :(得分:1)

这是因为刷新页面实际上会重新提交上一个请求,因此浏览器会重新提交您的POST请求。不能在一分钟内测试这个;但是,也许尝试在GET请求上设置bool - TempData["FirstLoad"] - 为true,然后在POST方法中执行类似的操作:

if (TempData["FirstLoad"] != null && TempData["FirstLoad"] == true)
{
    if (rows.Count <= 1)
    {
        ViewBag.Error = "...";
    }
}
else
{
    ViewBag.Error = null;
    return View();
}
TempData["FirstLoad"] = false;
return View("AllMediaDetails");

我的理由是TempData存储在会话中,所以它的值应该保留在刷新上(而不是重新提交,因为它们最初就好像值被传递一样,例如,隐藏字段)。