私はMVCを初めて使用し、WebフォームアプリケーションをMVCに更新しています。共有レイアウト(Webフォームのマスターページ)があり、ビューごとにメタ情報とタイトル情報を設定したいのですが、このためのオプションが表示されません。助けてくれてありがとう。
4 に答える
通常、レイアウトには次のようなものがあります。
<!DOCTYPE html>
<html lang="en">
<head>
<title>@ViewBag.Title</title>
<!-- the rest omitted for brevity -->
重要な部分は@ViewBag.Title
です。このかみそりの構文のビットは、の値をエンコードして書き込みますViewBag.Title
。ディクショナリをバッキングストアとしてViewBag
使用する動的タイプに対するすべてのレイザービューのプロパティ です。ビューで使用したいランダムなものを保存できる単なる辞書です。ViewData
ViewData
コントローラ、レイアウト、またはビューで、を取得または設定できますViewBag.Title
。レイアウトを使用するビュー(_Layout.cshtml
この例では呼び出されます)に設定する方法の例を次に示します。
@{
ViewBag.Title = "My View's Title";
Layout = "~/Views/Shared/_Layout.cshtml";
}
からモデルメタデータにアクセスできますViewData.ModelMetadata
。この例では、モデルのプロパティを列挙し、名前を表示します。
<ul>
@foreach (var property in ViewData.ModelMetadata.Properties)
{
<li>@property.PropertyName</li>
}
</ul>
あなたのコントローラーの方法で。
ViewData["Title"] = "this is page one title";
あなたの見解では、これを持っています。
@ViewData["Title"])
タイトルがhtmlの場合、@html.raw(ViewData["TopMessage"])
かみそりエンジンはmvcに適しているため、新しいプロジェクトを作成するときはかみそりを試すことをお勧めします。お役に立てば幸いです。
アクション名とコントローラー名を使用して動的にページタイトルを設定するのが好きです。Humanizerのようなライブラリを使用して、「SomeActionName」を「Someactionname」に変換できます。
public static class HtmlHelperExtensions
{
public static MvcHtmlString GetPageTitle(this HtmlHelper helper)
{
var actionName = helper.GetRouteDataValue("action");
var controllerName = helper.GetRouteDataValue("controller");
return new MvcHtmlString(controllerName.Humanize() + " - " + actionName.Humanize());
}
private static string GetRouteDataValue(this HtmlHelper helper, string value)
{
return helper.ViewContext.RouteData.Values[value].ToString();
}
}
次に、_Layoutで:
<title>@Html.GetPageTitle()</title>
Viewbag.Title
これらの記事は関連性があるように見え、いくつかの指針を与えるように設定する必要があります。