2

私はMVC Music Store のチュートリアルに取り組んでおり、小さな問題やクエリに遭遇しました。

IDでアルバムを探しています。

var album = db.Albums.Find(id)

これは正常に機能しますが、id が存在しない場合、コントローラーが null モデルをビューに渡すと NullReferenceException が発生します。

これを修正するには2つの方法が考えられます。

方法 1: コントローラーで null を確認し、null の場合は、別のビューを表示する / インデックス ページや専用のエラー ページ / 404 が見つからないページなどの別のアクションにリダイレクトします。

    //
    // GET: /Store/Details/4
    public ActionResult Details(int? id)
    {
        var album = db.Albums.Find(id);

        if (album == null) return RedirectToAction("Index");
        else return View(album);
    }

方法 2: モデルがビューで null かどうかを確認します。そうである場合は、モデル固有の項目を表示せず、代わりにエラー メッセージを表示します。

@model MvcMusicStore.Models.Album
@{
    ViewBag.Title = "Details";
}
@if (Model == null)
{
    <h2>That album doesn't exist</h2>
} 
else 
{
    <h2>Details: @Model.Title</h2>
}

質問:これに対処する他の方法/ベストプラクティスの方法はありますか? 方法 1 と方法 2 の利点はありますか?

4

2 に答える 2

0
//
// GET: /Store/Details/4
public ActionResult Details(int? id)
{
    var album = db.Albums.Find(id);
    return ViewIfNotNull(album);
}

// boxing
private ActionResult ViewIfNotNull(object model)
{
    if (album == null) return RedirectToAction("Index");
    else return View(album);
}

// OR generic
private ActionResult ViewIfNotNull<T>(T model)
{
    if (album == null) return RedirectToAction("Index");
    else return View(album);
}
于 2013-06-24T21:03:54.777 に答える