7

私は C# と vb.net の winform に慣れており、通常はブレークポイントを設定してコードをステップ実行するだけで、必要なすべてのエラーを見つけることができます。

私が間違っていることを知りたいです。

ここにブレークポイントを配置しています:

public ActionResult Index(int id)
{
    var cnty = from r in db.Clients
               where r.ClientID == id
               select r;

    if (cnty != null) // breakpoint here
    {
        return View(cnty); // F11 jumps over this section of code returning me to the error page below.
    }
    return HttpNotFound();
}

繰り返しになりますが、正確にエラーが発生した場所や理由はわかりません。スローされているエラーの理由またはさらに良い方法を見つけるにはどうすればよいですか?

VS2012 mvc4 c# を使用しています。

4

3 に答える 3

11

ビュー自体にブレークポイントを配置する必要があります。次のようなかみそりの構文を使用して、任意のものにブレークポイントを配置できます。

@Html.ActionLink
@{ var x = model.x; }

null 参照例外が発生している場合は、ビューでモデルを使用する場所にブレークポイントを配置します。

于 2013-06-24T17:50:22.243 に答える
4

表示されている例外を確認すると役立ちます。ページのレンダリング時に例外が発生していると思います。上記の "David L" として、Razor ビュー ( ) にブレークポイントを設定しますIndex.cshtml

しかし、なぜ?

MVC での要求/応答のライフサイクルを理解するのに役立ちます。これは、ビジュアルで見つけた最初の例です。他にもあるはずです。

  • リクエストはコントローラーにルーティングされます
  • コントローラーは次を返しますActionResultreturn View(cnty);
  • MVC はActionResultビューに渡します
  • Index.cshtmlを使用しようとすると、例外が発生しますActionResult

破棄された DB コンテキスト オブジェクトと関係があると推測します。使用している ORM に応じて、次の結果

from r in db.Clients
where r.ClientID == id
select r

ですIQueryable<Client>。コードが実行される前に、まだデータベースに接続していないことに驚くかもしれませんreturn View(cnty);。代わりにこれを試してください:

return View(cnty.ToList());

繰り返しますが、表示されている正確なエラーは重要です。私の提案は、次のIndex.cshtmlように始まります。

@model IEnumerable<Client>

アップデート:

以下の OP のコメントによると、スタック トレースは利用できません。開発中にブラウザーでスタック トレースを表示することに特化した質問が多数あります。少なくとも、以下が設定されていることを確認してくださいweb.config

<system.web>
    <customErrors mode ="Off" />
</system.web>
于 2013-06-24T18:11:33.787 に答える