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 からの 1 行/呼び出しのみで実行できる方が理にかなっています。

これを達成する方法はありますか?

4

2 に答える 2

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);
}
于 2011-10-09T04:44:16.883 に答える
2

メソッドから null を返すだけで、アクション メソッドが null を取得したときに create ビューを返すようになります。

于 2011-10-09T02:55:29.917 に答える