我是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"]">
我实际上遇到的一个问题是我正在尝试构建一个痕迹路径。目前我可以将控制器/操作名称显示在痕迹中,但我希望访问这些控制器/操作的视图数据。
我无法找到解释如何操作的地方/如果可能的话。
因此;
请提供准确说明如何操作的代码示例或资源
非常感谢你的时间。
答案 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方法,因此您应该在页面/视图中获得标题描述属性。