MVC2 - 逻辑应该去的基本问题

时间:2010-08-16 04:14:13

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

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

在控制器中:

    //
    // GET: /Equipment/

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

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

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

等等

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

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

修改

感谢您的帮助。

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

2 个答案:

答案 0 :(得分:3)

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

通过返回所谓的ViewModel,这是最好的完成IMO。

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

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

修改

FormViewModel的原因是因为如果你想添加其他东西来返回视图,你只需要扩展模型,这样就可以很容易地添加更多的部分视图等。

编辑2

如果您有部分viwe,请致电ArtistList,其中包含艺术家的完整列表。然后它简单地通过艺术家列表进行迭代,并呈现另一个PV调用,称艺术家为其提供单个艺术家实例。

然后你可以在Artist部分视图中做一个简单的检查以获得null。

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

答案 1 :(得分:2)

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

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

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