いくつかの方法:
- それを TempData["statusmsg"] に配置し、そこからアクションまたはビューで選択します。欠点: ユーザーがそれをクリックしてページをリロードしなかった場合、再度表示されません。
- セッションに入れます。ユーザーがステータスリンクをクリックしたときにのみ、セッションから削除します。
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分で十分でない場合は、誰かが時間をかけて提供してくれることを願うしかありません。完全に機能するテスト済みのソリューション...そしてこれに対して料金を請求することはありません;-)