注意到 StackOverflow 如何根据您的事件显示一些漂亮的状态栏消息? (首页的橙色条)我希望做同样的事情,但我不确定如何做。
现在我知道如何使用 ASP.NET MVC 1.0 在 UI 中显示验证错误...这并不太难。但是如果我想显示一个状态栏的东西(不确定它们叫什么)并且我猜它们是用 jQuery 完成的......你该怎么做。
更重要的是,我还希望在调用另一个操作后执行此操作
例如。
public ActionResult AuthoriseWithTwitter(string nickname)
{
// Authorise, etc. etc.
....
// If we have a Twitter OAuth Access token
// (ie. we've come BACK from twitter OK)
// then go back to the Index action, but display a status bar
// message saying 'done / thanks / got it / etc..'
return RedirectToAction("Index", new[] { nickname });
}
我不确定如何将消息传递回该操作以及如何使用这些状态栏内容之一显示该消息。
干杯!
最佳答案
几种方法:
- 将其放入 TempData["statusmsg"] 并在您的操作或 View 中从那里选择它。缺点:如果用户没有点击它并重新加载页面,则不会再次显示。
- 将其放入 session 中。仅当用户单击状态链接时,您才会将其从 session 中删除。
您可以直接访问 TempData/Session,或者您可以让 BaseController 具有 StatusMsg 属性和相关内容,或者您可以让 BaseViewModel(所有操作 View 模型的基类)包含此 StatusMsg 属性。
至于状态栏jQuery,你可以很容易地从google中选择一个,例如http://www.west-wind.com/WebLog/posts/388213.aspx , http://plugins.jquery.com/project/positionFooter 。然而,如果你想将它定位在顶部,那就容易多了,只需几行 CSS/jQuery 行:绝对位置为 0:0,宽度 100%,也许设置不透明度,然后当你收到消息时就这样做
<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");
}
}
然后在 View 中引用 ViewData 而不是 Session。
现在,当然还有更多的事情要做,上面的代码是我想出来的,未经测试...但是如果这还不足以在 5 分钟内完成这件事,那么你只能希望有人会采取是时候提供完整的工作测试解决方案了...并且不会为此收费;-)
关于jquery - 如何将错误消息显示回 ASP.NET MVC 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1584832/