【问题标题】:MVC best practice for displaying static generated data显示静态生成数据的 MVC 最佳实践
【发布时间】:2015-06-12 08:45:24
【问题描述】:

问题背景:

我有一个两页的 MVC 4 网络应用程序。第一个页面的视图当前将其数据作为静态手动输入到视图中,即没有任何内容从其关联的控制器方法传递给视图,如下所示:

索引控制器方法:

Public ActionResult Index()
{
  return View();
}

Index.cshtml 视图:

<div class="titleHeader">Welcome To This Test Example</div>

最佳实践:

上面的例子是否可以使用,或者我应该在 Index 控制器上生成一个 ViewModel 对象,填充静态数据然后将其返回给 View?如图:

Index Controller 带有 ViewModel 的索引方法:

Public ActionResult Index()
{
  HomePageVM homepageVM = new HomePageVM
  {
    WelcomeMessage = "Welcome To This Test Example";
  };

  return View(homepageVM);
}

Index.cshtml 现在绑定到 HomePageVM ViewModel:

@model TestPage.Models.HomePageVM

<div class="titleHeader">@Model.WelcomeMessage</div>

【问题讨论】:

  • 这取决于你。如果您只需要静态数据,那么您的第一个版本是正确的。如果将来您需要将动态内容添加到视图中,第二个版本会很有帮助。
  • 这个问题可能更适合codereview.stackexchange.com

标签: c# asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

我认为(观点),静态数据最好使用Resource文件。

使用这些资源文件,您将能够轻松地移植到多语言网站。

基本上你需要创建resx 文件,将条目公开。

在您的 cshtml 中,您可以通过以下方式访问它:

<div class="titleHeader">@Resources.WelcomeMessage</div>

根据 UIThread 的文化信息,它能够选择适当的语言。

您可以在此处找到教程: http://www.codeproject.com/Articles/778040/Beginners-Tutorial-on-Globalization-and-Localizati

至于你的选择:

1) 实际上没有必要为静态数据创建 ViewModel,除非您希望它在未来是动态的(尽管现在为未来的需求而开发是个坏习惯)。

2) cshtml 中的硬编码字符串,可以,但不适合多语言。我想提一下 1 个好处:非开发人员更容易更改 html。

【讨论】:

  • 您如何知道 OP 需要制作多语言网站?如果没有多语言要求,这是gold plating
  • @Liam:OP 的问题标题状态为best practices;所以我给出了多种选择,因为我认为 OP 会从中受益。
【解决方案2】:

基于gold plating你的代码的原则。

您不需要视图模型(现在),所以不要添加它。如果您以后想要一个视图模型,那么添加一个很简单。您的目标应该是尽可能创建最简单的解决方案。对我来说,这意味着视图模型(或任何其他不是纯 HTML 的解决方案)只会增加不必要的复杂性。


stefan 对资源的回答对我来说似乎又是镀金的。它基于:

将能够轻松移植到多语言网站。

您的网站是多语言的吗?有可能吗?如果,这是镀金。

【讨论】:

  • 不错的文章,我同意,但有一个关键点:Is it ever likely to be?。通常这取决于业务要求,但总工程师可能会得出结论,必须有额外的要求。否则为什么要保持代码对扩展开放而对更改关闭?我想说的是,从两个角度来看,我们都必须批判:)
  • 是的@Stefan,这取决于要求和时间压力。如果您镀金并且碰巧您添加的内容很有用,那么您就成功了。但是您应该问自己,我在这里添加的内容可能会被使用吗?现在添加此功能有什么好处吗?它是否会使其稍后更快,或者如果稍后添加它需要相同的时间,为什么不在需要时(以及如果)添加该功能。如果您添加代码(复杂性)并且从未使用过,那么您就浪费了您的时间/金钱并且使将来更难维护而没有任何好处
【解决方案3】:

我并不是真正的代码专家,但是: 当您只想显示一行静态文本时,为什么要使用 viewbag 甚至 viewmodel?想加 2 + 2 的时候一般不用计算器吧?

&lt;div&gt; 在我看来还不错

【讨论】:

  • 感谢您的回复。非常正确,但由于这是一个 MVC 应用程序,通常涉及一个“模型”,而不仅仅是一个控制器和视图。我还可以实现一个 ViewModel,它可能(稍后)由数据库填充,这样逻辑就可以开始使用了。目前虽然我会坚持我所拥有的。
  • Viewmodel 如果您的项目是非常好的:1)足够大 2)有 Db 和模型或至少有集合和类 3)您想在视图中显示其中的一些
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多