是否有可能使非ActionResult方法返回ActionResult ...或最佳/最佳解决方法?

时间:2011-10-09 02:51:27

标签: c# asp.net-mvc-3 methods actionresult

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

实际的精确对象构建有点复杂,特别是在开发过程中,我已经多次更改了它。出于这个原因,我从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)& return View("CreateObject");(如果为null)。

但是,由于我想在一些地方重复这一点,因此能够在ActionResult的一行/调用中只有GetTheObject()更有意义。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:3)

我有一个类似的场景,我希望在我的存储库返回null对象的情况下返回“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);
}

答案 1 :(得分:2)

只需从方法中返回null,并让action方法在获取null时返回create视图。