2009-10-18 61 views
1

请注意,StackOverflow如何根据您的活动显示一些不错的状态栏消息? (顶部橙色栏)我希望能做到这一点,但我不知道如何。如何将错误消息显示回ASP.NET MVC页面?

现在我知道如何使用ASP.NET MVC 1.0向UI显示验证错误......这并不难。但是,如果我想显示一个状态栏thingy(不知道他们叫什么),我猜他们已经完成了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 }); 
} 

我不知道如何将消息传递回该动作以及如何显示该消息与其中一个状态栏的东西。

干杯!

回答

3

几种方法:

  1. 把它放到TempData的[ “statusmsg”],并从那里接它在你的行动或查看。缺点:如果用户没有点击并重新加载页面,则不会再次显示。
  2. 加入会议。当用户点击状态链接时,您只会将其从会话中删除。

您可以直接访问的TempData /会话,或者你可以用BaseController财产StatusMsg和相关的东西,或者你可以有BaseViewModel(对自己的行为视图模型基类)包含本StatusMsg属性。

至于状态栏jQuery,你可以很容易地从谷歌挑选一个,例如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> 

还有更多。你还的div id为“味精”和

#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( “状态”):

{ 
    if (Session["status"] != null) 
    { 
    ViewData["status"] = Session["status"]; 
    Session.Remove("status"); 
    } 
} 

,然后引用ViewData的,而不是会议在视图中。

现在当然可以做更多事情了,上面的代码不在我的脑海里,没有经过测试......但如果这还不足以在5分钟内做到这一点,那么你只能希望有人会花时间提供完整的工作测试解决方案...并不会为此收取费用;-)

+0

太棒了。我保持沉默,看看有没有人会提到TempData。我喜欢但不确定。其次,我不确定的jQuery插件..所以它被称为positionFooter? KEWL。现在,我如何喜欢Model.StatusMsg(假设已经添加了一个视图模型)到jQuery positionFooter?上面的代码只会告诉它淡入..但不是如何设置它的内容?你可以稍微编辑一下吗? – 2009-10-18 14:21:16

+0

完美。这里有足够的信息让我做这个shiz。真棒。谢了哥们! – 2009-10-19 03:12:56

相关问题