0

我在视图包中设置了一条错误消息,以便在每次回发后向用户显示我不想在页面重新加载或刷新时显示此错误消息。我试图将它设置为 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");
            }
4

1 回答 1

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 存储在会话中这一事实,因此它的值应该在刷新时保留(而不是像原来那样重新提交,就好像值作为隐藏字段传递一样)。

于 2013-04-25T21:29:22.303 回答