简短问题:具有以下常见网站范围属性的正确方法是什么:
_layout.cshtml
和其他观点同时仍允许自定义控制器使用自己的模型吗?
换句话说,如何告诉asp.net:
CommonModel
使用_layout.cshtml
长篇故事
我创建了一个示例asp.net MVC 4 webapp,默认情况下HomeController
和AccountController
HomeController.cs
public ActionResult Index()
{
CommonModel Model = new CommonModel { PageTitle = "HomePage" };
return View(Model);
}
BaseModel.cs
public abstract class BaseModel
{
public string AppName { get; set; }
public string Author { get; set; }
public string PageTitle { get; set; }
public string MetaDescription { get; set; }
...
}
CommonModel.cs
public class CommonModel: BaseModel
{
public CommonModel()
{
AppName = Properties.Settings.Default.AppName;
Author = Properties.Settings.Default.Author;
MetaDescription = Properties.Settings.Default.MetaDescription;
}
}
_layout.cshtml
@model K6.Models.BaseModel
<!DOCTYPE html>
<html>
<head>
<title>@Model.PageTitle - @Model.AppName</title>
...
问题是,这种做法:
CommonModel
以使_layout.cshtml
识别我的自定义属性,但同时这需要大量工作才能制作东西在处理HTTP帖子,显示列表等时工作...... 必须有其他方法来做到这一点。我是asp.net MVC的新手,那么关于必须使用ViewBag
的最佳方法是什么?
答案 0 :(得分:1)
我想到的第一个是静态的
public static class ServerWideData {
private static Dictionary<string, Data> DataDictionary { get; set; } = new Dictionary<string, Data>();
public static Data Get(string controllerName = "") { // Could optionally add a default with the area and controller name
return DataDictionary[controllerName];
}
public static void Set(Data data, string name = "") {
DataDictionary.Add(name, data);
}
public class Data {
public string PropertyOne { get; set; } = "Value of PropertyOne!!";
// Add anything here
}
}
您可以通过调用
从任何地方添加数据 ServerWideData.Set(new Data() { PropertyOne = "Cheese" }, "Key for the data")
使用
在任意位置检索它 ServerWideData.Get("Key for the data").PropertyOne // => Cheese