gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:45 25 4
gpt4 key购买 nike

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

实际的精确对象构建起来有点复杂,尤其是在开发过程中,我已经多次更改它。为此,我将方法从 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;
}

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

我不知道是不是因为我在将近凌晨 4 点编码,或者我不是那么好,但是,一种巧妙的方法正在逃避我。

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

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

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

return passback;
}

很明显,这是行不通的。

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

但是,正如我想在几个地方重复这一点,能够仅在一行中使用 GetTheObject() 或从 ActionResult 进行调用更有意义。

有什么办法可以实现吗?

最佳答案

我有一个类似的场景,我想返回一个“NotFound” View ,以防我的存储库返回一个空对象。我实现了一个 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);
}

关于c# - 是否有可能使非 ActionResult 方法返回 ActionResult ... 或最佳/最新的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com