如何使用C#类并在2个cshtml页面之间共享它

时间:2016-10-06 12:54:52

标签: c# asp.net razor asp.net-webpages

我想将ASP.NET应用程序(.aspx)移植到ASP.NET网站[Razor v3](.cshtml),我在2页之间共享一个类变量时遇到了麻烦。

非常简单的例子。如果我有:

public class CompactDisk
{
    public string name;
    public string artist;

    public CompactDisk(string n, string a)
    {
        name = n;
        artist = a;
    }
}

我想在_AppStart.cshtml

中实例化它
@{
    CompactDisk cd = new CompactDisk("Abbey Road", "The Beatles");
}

我想在两个不同的页面中使用它:

<p>@cd.name - @cd.artist</p>

分享类变量并从不同页面访问它的最佳方法是什么?

对不起我的无知,我是Razor的新人。

2 个答案:

答案 0 :(得分:0)

如果类实例不是ViewModel的正式部分(即某些“环境信息”,如用户当前登录信息等),则在Controller中创建一个实例并将值设置为ViewBag。然后,您可以在Razor页面中将ViewBag作为松散类型的环境值字典访问。

答案 1 :(得分:0)

  1. 创建一个新控制器:
  2. <强>项目/控制器/ CompactDiskController.cs

    public class CompactDiskController : Controller
    {
        public CompactDisk Cd { get; }   
    
        public CompactDiskController()
        {
            this.Cd = new CompactDisk("Abbey Road", "The Beatles");
        }
    
        public ActionResult Index()
        {
            return View(this.Cd);
        }
    
        public ActionResult List()
        {
            return View(this.Cd);
        }
    }
    
    1. 下移动您的模型

      <强>项目/型号/ CompactDisk.cs

      public class CompactDisk
      {
          public string name;
          public string artist;
      
          public CompactDisk(string n, string a)
          {
              name = n;
              artist = a;
          }
      }
      
      1. 下创建新视图

        <强>项目/查看/ CompactDisk

        <强> Index.cshtml

        @model Project.Models.CompactDisk
        
        @{
            ViewBag.Title = "Show from VIEW 1";
        }
        
        <h2>VIEW 1</h2>
        
        @Html.DisplayFor(model => model.name)
        @Html.DisplayFor(model => model.artist)
        

        <强> List.cshtml

            @model Project.Models.CompactDisk
        
        @{
            ViewBag.Title = "Show from VIEW 2";
        }
        
        <h2>VIEW 2</h2>
        
        @Html.DisplayFor(model => model.name)
        @Html.DisplayFor(model => model.artist)