setting the page title, meta info in a view in asp.net mvc 4

前端 未结 4 1717
不知归路
不知归路 2021-02-12 15:04

I am very new to MVC and I am updating a web form application to mvc. I have a shared layout (masterpage in webforms), I would like to set the meta and title information per vie

相关标签:
4条回答
  • 2021-02-12 15:34

    You need to set Viewbag.Title These articles look relevant and will give you some pointers:

    • How do I access a ViewBag.Title after it has been set by the underlying View?
    • In a Razor view how can I insert the page title without a <?
    0 讨论(0)
  • 2021-02-12 15:37

    Typically, in your layout, you'll have something like this:

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

    The important part is @ViewBag.Title. This bit of razor syntax encodes and writes the value of ViewBag.Title. ViewBag is a property on all razor views to a dynamic type that uses the ViewData dictionary as its backing store. ViewData is just a dictionary where you can store random stuff that you want to use in your view.

    In your controller, layout, or view, you can get or set ViewBag.Title. Here's an example of how to set it in a view that uses your layout (called _Layout.cshtml in this example):

    @{
       ViewBag.Title = "My View's Title";
       Layout = "~/Views/Shared/_Layout.cshtml";
    }
    

    You can access the model metadata from ViewData.ModelMetadata. In this example, I enumerate the properties of the model and display the names:

    <ul>
    @foreach (var property in ViewData.ModelMetadata.Properties)
    {
      <li>@property.PropertyName</li>
    }
    </ul>
    
    0 讨论(0)
  • 2021-02-12 15:38

    In your method of controller.

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

    in you view, have this. @ViewData["Title"])

    if title is html, it should be @html.raw(ViewData["TopMessage"])

    Razor engine is better for mvc, so I recommend you try razor when you create a new project. hope it help you.

    0 讨论(0)
  • 2021-02-12 15:45

    I like to set page titles dynamically using the action and controller names. You can use a library like Humanizer to convert "SomeActionName" into "Some action name":

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

    and then in your _Layout:

    <title>@Html.GetPageTitle()</title>
    
    0 讨论(0)
提交回复
热议问题