我有一个来自数据库的对象,该对象在我的应用程序的很多地方使用。
实际的精确对象构建有点复杂,特别是在开发过程中,我已经多次更改了它。出于这个原因,我从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()
更有意义。
有没有办法实现这个目标?
答案 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视图。