2

コードをクリーンアップしようとしています。次のように更新されるグリッド画面があります。

    public ActionResult Details(string pk)
    {
        IEnumerable<ContentDetail> model = null;
        try
        {
            model = _content.Details(pk);
            if (model.Count() > 0)
            {
                return PartialView(getView(pk) + "Details", model);
            }
        }
        catch (Exception e)
        {
            log(e);
        }
        return Content("No records found");
    }

私のコードの残りの部分はすべてjsonを使用しており、次のようなものを返したいと思います。

public JsonResult JsonDetails(string pk)

しかし、PartialViewについてはどうすればよいですか?これを行う方法については何も見つかりません。また、これを行うことの利点/欠点はありますか?コードが失敗した場合、新しいASPMVC4コードが使用する次のようなものを返すと考えていました。

return Json(new { errors = GetErrorsFromModelState() });

誰かがこれを手伝ってくれますか?特にMVC4に関する提案を探しています。

4

2 に答える 2

6

私は以前、この回答で概説したアプローチを使用しましたが、これは成功しました。

データのみを返す場合よりもペイロードがはるかに大きくなる可能性がありますが、JSON 内で HTML を返すことの欠点は考えられません。

別の方法は、モデルを JSON として返し、テンプレート ライブラリ (たとえばHandlebars.js ) を使用して、クライアントでマークアップを生成することです。これは、単一ページ アプリケーションでは一般的なアプローチです。

エラーを返すことについてのあなたの考えは良いです。GetErrorsFromModelStateモデルの状態に検証エラーがある場合にのみ使用されます。上記の例では、このメソッドを使用する必要がある検証を実行していません。したがって、catch-block 内にわかりやすいメッセージを出力したいと思うでしょう。たとえば、

try
{
    ...
}
catch (Exception e)
{
    log(e);
    return Json(new { errors = "An error occurred, please try again later" });
}
于 2012-04-25T15:38:45.557 に答える
1

以前にこの回答のコードを使用したことがありますが、うまくいきました。特定のエラーを返そうとしたことはありませんが、アクセスcontroller.ModelStateして確認することは可能です。

于 2012-04-25T13:55:04.557 に答える