2009-10-18 78 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

相關問題