获取特定的控制器视图数据

本文关键字:视图 数据 控制器 获取 | 更新日期: 2023-09-27 18:15:06

我是ASP.net新手,已经做了10年的PHP程序员。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();
        }
    }
}
<<p> 视图/strong>
<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"]">

我的问题实际上出现在我的另一个视图中,我试图建立一个面包屑路径。目前,我可以得到控制器/动作名称出现在面包屑中,但是我希望访问那些控制器/动作的视图数据。

我找不到任何地方解释如何做这件事/如果可能的话。

因此;

  • 我要去存储元数据错误,如果是这样,告诉我一个更好的方法去做。
  • else请概述访问控制器ViewData的方法

请提供准确解释如何做的代码示例或资源

感谢您的宝贵时间。

获取特定的控制器视图数据

我会像下面这样做,

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

关于Model类

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

2)在BaseController类中创建一个initialize方法,它将为你的模型设置Title和description的属性。

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

3)在About控制器中,你需要像下面这样调用initialize方法。

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) In _Layout。cshtml类,你需要使用BaseModel类

@model <YourNameSpace>.BaseModel
<title>@Model.Title</title>

5)其他视图,例如:About.cshtml

@model <YourNameSpace>.AboutModel

我建议不要使用ViewData来处理常见的网站属性,如Title/Meta标签。这样你的代码会更清晰…

因为你正在为其他视图派生基类模型,并且在所有ActionResults方法中初始化Initialize方法,所以你应该获得跨页面/视图的标题描述属性