首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在asp.net MVC 4中拥有站点范围的公共属性的正确方法?

在asp.net MVC 4中拥有站点范围的公共属性的正确方法?
EN

Stack Overflow用户
提问于 2016-10-29 18:47:43
回答 1查看 511关注 0票数 0

简短的问题:有什么合适的方法来拥有共同的、网站范围内的属性:

  1. 可以在_layout.cshtml视图和其他视图中访问
  2. 强类型.Model.TextInUserLanguage

同时仍然允许自定义控制器对自己的模型?

,换句话说,如何告诉asp.net:

  1. 默认情况下将CommonModel_layout.cshtml一起使用
  2. 当访问具有自己的模型M/ view V的控制器C时,请将模型M应用于查看V(同时仍遵守规则#1)

长篇小说

我创建了一个示例asp.net MVC 4 webapp,默认情况下它具有HomeControllerAccountController

HomeController.cs

代码语言:javascript
复制
    public ActionResult Index()
    {
        CommonModel Model = new CommonModel { PageTitle = "HomePage" };
        return View(Model);
    }

BaseModel.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
public class CommonModel: BaseModel
{
    public CommonModel()
    {
        AppName = Properties.Settings.Default.AppName;
        Author = Properties.Settings.Default.Author;
        MetaDescription = Properties.Settings.Default.MetaDescription;
    }
}

_layout.cshtml

代码语言:javascript
复制
@model K6.Models.BaseModel

<!DOCTYPE html>
<html>
<head>
    <title>@Model.PageTitle - @Model.AppName</title>
    ...

问题是,这种方法:

  1. 真的感觉很烦躁
  2. 我必须更改我的webapp中的每个控制器,以便他们使用这个CommonModel来使_layout.cshtml识别我的自定义属性,但同时这需要大量的工作,以便在处理HTTP、显示列表等时工作。

一定有别的办法可以做到的。我是asp.net MVC的新手,那么使用ViewBag的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-29 23:29:04

我首先想到的是一些静态的东西。

代码语言:javascript
复制
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
    }
}

您可以通过调用

代码语言:javascript
复制
    ServerWideData.Set(new Data() { PropertyOne = "Cheese" }, "Key for the data")

在任何地方用

代码语言:javascript
复制
    ServerWideData.Get("Key for the data").PropertyOne // => Cheese
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40322469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档