2012-09-25 16 views
13

私はMVCにはまだまだ慣れていないし、Webフォームアプリケーションをmvcに更新している。私は共有レイアウト(webformsのmasterpage)を持っていますが、私はビューごとにメタ情報とタイトル情報を設定したいと思いますが、このオプションはありません。助けてくれてありがとう。重要な部分は@ViewBag.Titleあるページタイトル、メタ情報をasp.netのビューで設定するmvc 4

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>@ViewBag.Title</title> 
    <!-- the rest omitted for brevity --> 

答えて

32

一般的に、あなたのレイアウトで、あなたはこのようなものがあるでしょう。このビットのひげそり構文は、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> 
+0

:あなたの_layoutで

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(); } } 

、その後:あなたは「いくつかのアクション名」に「SomeActionName」を変換するためにHumanizerのようなライブラリを使用することができます – Kate

4

あなたのコントローラの方法では。あなたの中に

ViewData["Title"] = "this is page one title";

表示、これを持っています。 @ViewData["Title"])

タイトルがHTMLであれば、それがあるべき@html.raw(ViewData["TopMessage"])

カミソリエンジンは、MVCのために優れているので、私はあなたが新しいプロジェクトを作成するときにかみそりを試してみてくださいお勧めします。それがあなたを助けることを願って

1

私はアクションとコントローラの名前を使ってページタイトルを動的に設定するのが好きです。私はメタタグを設定するのと同じ方法を使用し

<title>@Html.GetPageTitle()</title> 
関連する問題