2017-02-13 9 views
1

私は、ユーザーが互いにメッセージを送ることを可能にするウェブサイトを持っています。一番上の私のレイアウトには、未読メッセージの数を示す通知バーがあります。メッセージ付きのテーブルには未読(true、false)のプロパティがあります。私は簡単に現在のユーザーの未読のメッセージを検索することができます、私はちょうどレイアウトに送信する方法を知らない。レイアウトに送るコントローラがありますか?MVCコントローラをレイアウトしますか?

+0

https://gyazo.com/679499bcb8bef59b9d5843f068c253d2これはトップバーの写真です。共有レイアウトです。 – Ashley

+0

レイアウトビューで部分ビューをレンダリングすることができます –

+0

しかし、どこでレンダリングするコントローラをどこから呼び出すのですか?ユーザーがウェブサイト上で何か操作を行うたびに更新されますか? – Ashley

答えて

0

私は部分的なビューを作成し、それを呼び出すコントローラーを使用しました。 DBに未読メッセージを問い合わせ、ViewBagでカウントを送信しました。 @ Html.Actionで呼びます。ユーザーがウェブページをリフレッシュするたびにレンダリングされることを知らなかった。ありがとうございました:)

0

レイアウトページでモデルを使用することを定義できます。モデルとしてインターフェイスを使用することをお勧めします。

public interface IMessageNotification { 
    public int UnreadMessagesCount {get; set;} 
} 

レイアウトページを使用するすべてのViewModelは、このインターフェイスを実装する必要があります。あなたはこのようLayout.cshtmlにアクセスすることができ :

@model IMessageNotification 
<div class="myNotification">@Model.UnreadMessagesCount</div> 

は、もう一つの方法は、通知のためのプレースホルダとして機能し、レイアウト内のセクションを定義するために、すべてのビューをレンダリングすることができますでしょうASP.NET MVC Razor pass model to layout

を参照してください。それがどのように必要なのか通知。

レイアウト:

@* No model directive required *@ 
@if (IsSectionDefined("Notification")) { 
    @RenderSection("Notification") 
} 

コンクリートビュー(SomeConcreteViewModelが持つプロパティUnreadMessagesCount):コントローラ用として

@model SomeConcreteViewModel 
@section Notification { 
    <div class="myNotification">@Model.UnreadMessagesCount</div> 
} 

:あなたが実装さIMessageNotificationインターフェースに必要なデータを埋めるヘルパークラスを使用することができますビューモデルによって。このレイアウトを使用してビューをレンダリングするすべてのアクションでこれを呼び出します。

+0

答えをありがとう。私はあなたがレイアウトのためにビューモデルを使うことができることを知らなかった。私は別のアプローチを使用しました。私は部分的なビューを作成し、それを呼び出すコントローラを使用しました。 DBに未読メッセージを問い合わせ、ViewBagでカウントを送信しました。 @ Html.Actionで呼びます。あなたの努力のおかげで、ゲオルグ:) – Ashley

関連する問題