Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中调用自定义对象时遇到问题#_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 在C中调用自定义对象时遇到问题#

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

我有一个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 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