1

StackOverflowがアクティビティに基づいてステータスバーメッセージを表示する方法に注目してください。(トップページのオレンジ色のバー)同じことをしたいと思っていますが、方法がわかりません。

これで、ASP.NETMVC1.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 });
}

メッセージをそのアクションに戻す方法と、ステータスバーのいずれかを使用してそのメッセージを表示する方法がわかりません。

乾杯!

4

1 に答える 1

3

いくつかの方法:

  1. それを TempData["statusmsg"] に配置し、そこからアクションまたはビューで選択します。欠点: ユーザーがそれをクリックしてページをリロードしなかった場合、再度表示されません。
  2. セッションに入れます。ユーザーがステータスリンクをクリックしたときにのみ、セッションから削除します。

TempData/Session に直接アクセスするか、BaseController に StatusMsg プロパティと関連するものを持たせるか、BaseViewModel (すべてのアクションのビュー モデルの基本クラス) にこの StatusMsg プロパティを含めることができます。

ステータス バーのjQueryについては、Google から簡単に選択できます。ただし、それを上に配置したい場合は、CSS/jQuery の 2 行だけで、はるかに簡単です: 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");
  }
}

次に、ビューで Session の代わりに ViewData を参照します。

もちろん、もっとやるべきことがあるかもしれません。上記のコードは私の頭から離れていて、テストもされていません...しかし、これが5分で十分でない場合は、誰かが時間をかけて提供してくれることを願うしかありません。完全に機能するテスト済みのソリューション...そしてこれに対して料金を請求することはありません;-)

于 2009-10-18T13:22:31.750 に答える