【问题标题】:MVC2 - Basic question where logic should goMVC2 - 逻辑应该去哪里的基本问题
【发布时间】:2010-08-16 04:14:12
【问题描述】:

从 MVC2 开始,搞乱一个简单的数据库,只使用索引视图来显示如下项目:

在控制器中:

    //
    // GET: /Equipment/

    public ActionResult Index()
    {
        return View(database.Artists.ToList());
    }

然后是视图中自动生成的代码:

        <td> <%: item.ArtistID %> </td>
        <td> <%: item.GenreID %> </td>

等等等等

在我的示例中,此数据可能尚未填充,因此它可能为空。现在,当我尝试加载视图时,我会得到一个 NullReferenceException。那么这个代码属于哪里呢?

我猜你可以在视图中有一个 if 语句,尽管这肯定不是逻辑应该去的地方。我应该创建一个 html 帮助器,如果值为 null 则只返回空字符串?

编辑:

感谢您的帮助。

我还有一个问题。如果说我正在开发一个索引浏览类型的页面怎么办。目前我在一页上显示所有项目,但有 2k 个项目。是否有关于如何拆分的教程或示例?我想我的索引浏览控制器可以只从浏览器中获取一个整数范围值,然后我就说显示下一个 100

【问题讨论】:

    标签: asp.net visual-studio visual-studio-2010 asp.net-mvc-2


    【解决方案1】:

    当您返回艺术家列表时,您需要检查 null 并返回一个新的艺术家列表。

    IMO,这最好通过返回所谓的 ViewModel 来实现。

    Class MyFormViewModel
        List<Artist> artists {get; set;}
    

    然后在你的控制器中

    MyFormViewModel fvm = new MyFormViewModel();
    
    fvm.artists = database.Artists.ToList();
    if (fvm.artists == null) fvm.artists = new List<Artist>();
    return View(fvm)
    

    那么你的视图继承自MyFormViewModel

    然后考虑分解控制器中获取艺术家并将对象设置到另一层的逻辑

    编辑

    FormViewModel 的原因是,如果您想添加其他内容以返回视图,您只需扩展模型即可轻松添加更多部分视图等

    编辑 2

    如果您有部分 viwe 调用 ArtistList 获取完整的艺术家列表。然后它简单地遍历艺术家列表并呈现另一个 PV 调用,比如 Artist,它被赋予了一个艺术家的单个实例。

    然后你可以在 Artist 局部视图中做一个简单的检查是否为空。

    或者您可以在 ArtistList 部分视图中检查空记录并渲染另一个名为 NullArtist 的 PV。

    【讨论】:

    • 对不起,我的意思是一条记录中的一个字段可能为空。但是您的回答很有意义,所以我将更改构建非空列表的逻辑并将其设置为视图模型的数据
    【解决方案2】:

    一个选项是显示未找到艺术家时显示的不同视图,例如“未找到艺术家。”。在这种情况下,更改将在控制器中。

    另一个选项是修改视图,使其包含一些代码,以在列表为空时呈现未找到艺术家的消息或呈现列表。

    如果您以后需要,您可以随时使用 ViewModel 变得更复杂。在这个阶段有更简单的解决方案。

    【讨论】:

      猜你喜欢
      • 2017-03-27
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多