1

我有一个来自数据库的对象,该对象在我的应用程序的很多地方都使用过。

实际的精确对象构建起来有点复杂,尤其是在开发过程中,我已经更改了几次。出于这个原因,我将方法从Controller中提取出来,并构建了一个具有对象返回类型的方法。

但是,这个对象可能不存在,如果不存在,我的代码将创建它并返回它。

例如:

public ActionResult Index()
{    
    var model = GetTheObject();
    return View(model);
}

public MyComplicatedObject GetTheObject()
{
    MyComplicatedObject passback = ...database query....

    if(passback==null)
    create the object here....

    return passback;
}

但是,我不再想创建默认对象。如果它不存在,我希望将用户发送到一个视图以创建一个新视图。

我不知道是因为我几乎在凌晨 4 点开始编码,还是因为我不是那么好,但是,这样做的一种巧妙方法正在逃避我。

我知道以下方法行不通,但理想情况下这是我想要的:

public MyComplicatedObject GetTheObject()
{
    MyComplicatedObject passback = ...database query....

    if(passback==null)
    return View("CreateObject");

    return passback;
}

显然,这不会起作用。

我能想到的最佳解决方案基本上是返回 null 或异常,然后在 ActionResult 上使用if(passback==null)& (如果为 null)。return View("CreateObject");

但是,由于我想在几个地方重复这一点,因此能够只GetTheObject()从 ActionResult 中获取一行/调用而不是其他内容更有意义。

有什么办法可以做到这一点?

4

2 回答 2

3

我有一个类似的场景,我想返回一个“NotFound”视图,以防我的存储库返回一个空对象。我实现了一个ViewForModel辅助方法来避免重复自己:

public ActionResult Details(int id)
{
    var model = _repository.Retrieve(id);

    return ViewForModel("Details", model);
}

public ActionResult Edit(int id)
{
    var model = _repository.Retrieve(id);

    return ViewForModel("Edit", model);
}

private ActionResult ViewForModel(string viewName, object model)
{
    return model == null
        ? View("NotFound")
        : View(viewName);
}
于 2011-10-09T04:44:16.883 回答
2

只需从您的方法返回 null,并让您的操作方法在获取 null 时返回创建视图。

于 2011-10-09T02:55:29.917 回答