在我的控制器中,我有条件声明:
if (oLevel.PostPreID == 2)
{
if (db.OL.Any(x => DbFunctions.TruncateTime(x.Date) == DbFunctions.TruncateTime(oLevel.FlightDate) && x.PostPreID == oLevel.PostPreID && x.AID == oLevel.AID && x.deleted == false))
{
Response.Write(@"<script language='javascript'>alert('There is already a PostPreID for this AID for this Date!');</script>");
return RedirectToAction("Index", new { id = oLevel.AID }); ;
}
}
现在条件语句完美运行。问题是Response.Write
警报..当此条件触发时它不会出现。有什么理由为什么?
感谢任何帮助。
答案 0 :(得分:4)
这不是正确的方法。警报不起作用的原因是,在您将其写入响应后,您将重定向到另一个视图,因此浏览器永远不会呈现您正在输出的脚本标记。
不要这样做,而是让Index操作呈现的Index视图根据查询字符串参数有条件地输出脚本。
的伪代码:
return RedirectToAction("Index", new { id = oLevel.AID, alreadyExists = true });
然后在Index操作/视图中,检查alreadyExists是否等于true,如果是,则让该视图输出脚本标记和警告消息。
答案 1 :(得分:4)
因为您之后立即致电RedirectToAction()
。 RedirectToAction()向浏览器发送HTTP 302重定向响应,导致浏览器忽略正文中的任何内容(例如您的脚本),而是重定向到新的URL。
你可以解决这个问题,方法是添加一个查找附加参数的视图,告诉它呈现警报(可能是一个灯箱,因为这些天浏览器做alert()
的奇怪事情) 。但这似乎也不正确,因为任何人都可以通过访问网址来查看警报。可能你想在你的控制器或会话中做更多的事情。