C# 在C中调用自定义对象时遇到问题#
我有一个MVC.NET 4站点: 在HomeController.cs中,我创建了一个新对象(我引用了它来帮助我),Story,它将包含字符串title和author。这是代码:C# 在C中调用自定义对象时遇到问题#,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个MVC.NET 4站点: 在HomeController.cs中,我创建了一个新对象(我引用了它来帮助我),Story,它将包含字符串title和author。这是代码: namespace Site.Controllers { public class Story { public String Title { get; set; } public String Author { get; set; } public St
namespace Site.Controllers
{
public class Story
{
public String Title { get; set; }
public String Author { get; set; }
public Story(string title, string author)
{
Title = title;
Author = author;
}
}
public class HomeController : Controller
{
public Story Story1 = new Story("Test title", "Test author");
public ActionResult Index()
{
return View();
}
}
}
这一切似乎都在起作用——反正我没有收到任何错误——但当我试图在cshtml文件中使用它时,我收到了一个错误。下面是发生错误的地方(在articles.cshtml中):
如何正确使用我在别处定义的标题
另一个问题是:我是否只能在主页上使用标题?我需要它可以在整个网站访问
public class HomeController : Controller
{
public ActionResult Index()
{
Story story1 = new Story("Test title", "Test author");
return View(story1);
}
}
通过上述操作,您还可以执行以下操作:
<h1>@Site.Controllers.HomeController.Story1.Title</h1>
@model pathToClass.Story
<h1>@Model.Title</h1>
@Site.Controllers.HomeController.Story1.Title
更新
我不是建议在这里使用静态模型。从阅读中可以清楚地看出,OP不理解对象类和对象实例之间的区别,或者至少不理解这种区别在C#中的什么地方。CSHTML错误试图静态地获取故事标题,但由于属性不是静态的,因此无法获取
我相信这个问题的答案不是MVC101,而是C#101甚至OOP101
通过上述操作,您还可以执行以下操作:
<h1>@Site.Controllers.HomeController.Story1.Title</h1>
@model pathToClass.Story
<h1>@Model.Title</h1>
@Site.Controllers.HomeController.Story1.Title
更新
我不是建议在这里使用静态模型。从阅读中可以清楚地看出,OP不理解对象类和对象实例之间的区别,或者至少不理解这种区别在C#中的什么地方。CSHTML错误试图静态地获取故事标题,但由于属性不是静态的,因此无法获取
我相信这个问题的答案不是MVC101,而是C#101甚至OOP101。你的方法是错误的,事实上,无论如何都不会以你期望的方式工作。主要原因是控制器仅在请求的生存期内可用,因此在呈现视图时,控制器已经被释放
而且,通过将视图与控制器耦合,这违反了最初使用MVC的基本原则之一。这里应该做的是将模型作为参数传递到视图中,即
public ActionResult Index()
{
return View(new Story("Test title", "Test author"));
}
然后可以从视图的model
属性访问传递到cshtml文件的模型
@model Site.Controllers.HomeController.Story
<h1>@Model.Title</h1>
@model Site.Controllers.HomeController.Story
@模型名称
这真的是MVC 101。你的方法是错误的,事实上,无论如何都不会以你期望的方式工作。主要原因是控制器仅在请求的生存期内可用,因此在呈现视图时,控制器已经被释放
而且,通过将视图与控制器耦合,这违反了最初使用MVC的基本原则之一。这里应该做的是将模型作为参数传递到视图中,即
public ActionResult Index()
{
return View(new Story("Test title", "Test author"));
}
然后可以从视图的model
属性访问传递到cshtml文件的模型
@model Site.Controllers.HomeController.Story
<h1>@Model.Title</h1>
@model Site.Controllers.HomeController.Story
@模型名称
这真的是MVC101。您在该代码中遇到了多个问题
1.)一个文件中包含2个类。类Story
不应该在名称空间控制器中,它没有任何意义。请参考OOP原则和良好编程实践
2.)您尝试这样引用您的值@Site.Controllers.HomeController.Story.Title
但这意味着HomeController类中有一个静态属性/变量,您希望获取它的属性/变量,但事实并非如此,是吗
最简单的修复方法是将值作为模型的一部分传递给视图
public ActionResult Index()
{
return View(Story1);
}
现在,您可以访问如下值:
<h1>@Site.Controllers.HomeController.Story1.Title</h1>
@model pathToClass.Story
<h1>@Model.Title</h1>
@model pathToClass.Story
@模型名称
我真的反对在web开发中使用静态变量,因为以后您可能需要支持不同的语言等,这将成为一个不稳定的混乱局面。始终尽可能使用实例,尤其是在处理web应用程序时
3.)遵循命名约定。。故事1真是一个糟糕的选择。您在该代码中遇到了多个问题
1.)一个文件中包含2个类。类Story
不应该在名称空间控制器中,它没有任何意义。请参考OOP原则和良好编程实践
2.)您尝试这样引用您的值@Site.Controllers.HomeController.Story.Title
但这意味着HomeController类中有一个静态属性/变量,您希望获取它的属性/变量,但事实并非如此,是吗
最简单的修复方法是将值作为模型的一部分传递给视图
public ActionResult Index()
{
return View(Story1);
}
现在,您可以访问如下值:
<h1>@Site.Controllers.HomeController.Story1.Title</h1>
@model pathToClass.Story
<h1>@Model.Title</h1>
@model pathToClass.Story
@模型名称
我真的反对在web开发中使用静态变量,因为以后您可能需要支持不同的语言等,这将成为一个不稳定的混乱局面。始终尽可能使用实例,尤其是在处理web应用程序时
3.)遵循命名约定。。Story1真的是一个糟糕的选择。我在哪里定义标题和作者?哦,我想我创建了一个名为Story.cs的新文件,并将其放在模型中,然后在那里而不是在控制器中定义Story?@TravisHeeter我想你把模型类与模型类实例混淆了。去买一本好的MVC书籍,它会回答你接下来的100个问题。@TravisHeeter是的,就是这个想法。尽管如此,Story.cs
去哪里并不重要,只要类在范围内,您就可以从您的视图中引用它。好的,我让它开始工作了。我将Story移动到Models/Story.cs,但我使用了一个静态实例在控制器中创建Story1。它是w