获取特定的控制器viewdata

时间:2014-07-25 14:46:50

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我是ASP.net的新手,已经成为PHP编码器已有10年了。 MVC是有意义的,因为我发现它与Laravel非常相似。

我正在尝试找到在我的ASP.net MVC 4项目中存储和提供元数据到我的网页的最佳解决方案。根据我的阅读,我得出结论使用以下方法。

模型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace project.Models
{
    public class Meta
    {
        public String Title { get; set; }
        public String Description { get; set; }
        public String Keywords { get; set; }
        public String H1 { get; set; }
        public String H2 { get; set; }
        public String Robots { get; set; }
    }
}  

控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace project.Controllers
{
    public class AboutController : BaseController
    {
        public ActionResult Index()
        {
            ViewData["metaTitle"] = "About us";
            ViewData["metaDescription"] = "";
            ViewData["metaKeywords"] = "";
            ViewData["pageH1"] = "About";
            ViewData["PageH2"] = "";

            return View();
        }
    }
}

查看

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>project | @ViewData["metaTitle"]</title>
<meta name="description" content="@ViewData["metaDescription"]">
<meta name="keywords" content="@ViewData["metaKeywords"]">
<meta name="robots" content="@ViewData["metaRobots"]">

我实际上遇到的一个问题是我正在尝试构建一个痕迹路径。目前我可以将控制器/操作名称显示在痕迹中,但我希望访问这些控制器/操作的视图数据

我无法找到解释如何操作的地方/如果可能的话。

因此;

  • 我要么将错误存储元数据,如果是这样,请告诉我更好的方法。
  • 否则请概述一种访问控制器ViewData的方法

请提供准确说明如何操作的代码示例或资源

非常感谢你的时间。

1 个答案:

答案 0 :(得分:-1)

我会做类似下面的事情,

1)创建一个基类模型,这个基础模型将在其他模型中派生。

public class BaseModel
{
    public String Title { get; set; }
    public String Description { get; set; }
    public String Keywords { get; set; }
    public String H1 { get; set; }
    public String H2 { get; set; }
    public String Robots { get; set; }
}
  

关于模型类

public class AboutModel : BaseModel
{
    public string AboutDescription { get; set; }
}

2)在BaseController类中创建一个Intialize方法,它将为你的模型设置标题和描述的正确性。

public class BaseController : Controller
{
    public BaseModel Initialize(BaseModel model)
    {
        model.Title = "Title";
        model.Description = "Desc";
        return model;
    }
}

3)在About控制器中,您需要调用如下的初始化方法。

public class AboutController : BaseController
{
    public ActionResult Index()
    {
        //create instance for About Model
        var model = new AboutModel();
        Initialize(model);
        model.AboutDescription = "About Description";

        return View(model);
    }
}

4)在_Layout.cshtml类中,您需要使用BaseModel类

@model <YourNameSpace>.BaseModel

<title>@Model.Title</title>

5)其他观点ex:About.cshtml

@model <YourNameSpace>.AboutModel

我建议不要使用ViewData来处理标题/元标记等常用网站属性。这样你的代码就会更清晰......

由于您要将基类模型派生到其他视图并在所有ActionResults方法中初始化Initialize方法,因此您应该在页面/视图中获得标题描述属性。