2013-04-25 143 views
0

我在viewbag中设置一个错误消息,以便在每次回发后向用户显示,我不希望在页面重新加载或刷新时显示此错误消息。我试图将它设置为null,但它仍然显示,因为json参数仍然包含第一次提交的值。即使页面刷新后,asp.net mvc actionresult仍保留参数值?

 [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

这是因为刷新页面实际上重新提交了以前的请求,所以您的POST请求被浏览器重新提交。无法在一分钟内测试;然而,或许可以尝试设置bool - TempData["FirstLoad"] - 为true的GET请求,然后做这样的事情在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存储在会话的事实基础这一点,所以它的值应该保留在刷新上(而不是像原来那样重新提交,就像值被传递为例如隐藏字段一样)。

相关问题