几种方式:
- 将其放入 TempData["statusmsg"] 并在您的操作或视图中从那里选择它。缺点:如果用户没有点击它并重新加载页面,它就不会再次显示。
- 把它放到会话中。当用户单击状态链接时,您只会将其从会话中删除。
您可以直接访问 TempData/Session,或者您可以让 BaseController 具有 StatusMsg 属性和相关内容,或者您可以让 BaseViewModel(所有操作的视图模型的基类)包含此 StatusMsg 属性。
至于状态栏 jQuery,你可以很容易地从 google 中选择一个,例如http://www.west-wind.com/WebLog/posts/388213.aspx,http://plugins.jquery.com/project/positionFooter。但是,如果你想将它放在顶部,它会容易得多,只需几行 CSS/jQuery 行:绝对位置在 0:0,宽度 100%,也许设置不透明度,然后当你得到 msg 时就做
<script>
<% if (Model.StatusMsg != null) %>
$(function(){ $("#statusbar").fadeIn(); });
<% } %>
</script>
好的,这里还有更多。你有 id="msg" 的 div 和
#msg {
text-align: center;
position: absolute;
line-height: 2em;
left: 0px;
top: 0px;
width: 100%;
display: none;
opacity: 0.7;
background-color: #aaf;
border-bottom: 1px solid black;
}
您可以使用http://plugins.jquery.com/project/jQueryFixedPositionPlugin修复顶部的元素,使其不会随页面滚动。
现在,每当您收到状态消息时,您都会执行 Session["status"] = "mymessage"。或者,您覆盖 BaseController.OnActionExecuted 并将消息放入 Session 那里(如果它是应用程序范围的)。
然后在你看来你做
<script type="text/javascript">
function showstatus(text) {
$("#msg").fadeIn().append("<div>" + text + "</div>");
}
$(function(){
<% if (Session["status"] != null) { %>
var status = '<%= Session["status"] %>';
showstatus(status);
<% ; Session.Remove("status"); } %>
});
</script>
您可以通过在基础 OnActionExecuting 中执行此操作来避免 Session.Remove("status"):
{
if (Session["status"] != null)
{
ViewData["status"] = Session["status"];
Session.Remove("status");
}
}
然后在视图中引用 ViewData 而不是 Session。
现在,当然可以做更多的事情,上面的代码是我的头脑,未经测试......但如果这还不足以在 5 分钟内完成,那么你只能希望有人会花时间提供完整的工作测试解决方案......并且不会为此收费;-)