私はこれでかなり新しいので、私に同行してください。私はAJAX経由で私のコントローラでJsonResultメソッドを呼び出しています。 JsonResultアクションメソッドは、ストアドプロシージャを呼び出し、オブジェクトにデータをロードし、それを返してシリアライズし、クライアントのAJAX呼び出しに戻すプライベートメソッドを呼び出します。[]を付けないでJsonResultでエラーを返す
すべてがうまくいくが、Oracleの例外をキャッチすると、エラーを返すことができるようにしたい。私は現在、私のキャッチでResponse.Writeをやっていますが、それはJsonResultアクションを通っているので、メッセージに[]を追加します。私はいつもクライアント側でそれをトリミングすることができますが、私はこのようにしてはいけないと感じるか、よりクリーンな方法があります。
AJAXコール:
$.ajax({
type: "GET",
url: "/Controller/JsonResultActionMethod",
dataType: "json",
data: { someVar: someData },
cache: false,
success: function (results) {
// Do some stuff
},
error: function (xhr, status, error) {
alert(xhr.responseText);
}
});
化するJsonResultアクション:
[HttpGet]
public JsonResult JsonResultActionMethod(string someVar)
{
var myObjects = GetObjects(someVar);
return Json(myObjects , JsonRequestBehavior.AllowGet);
}
GetObjects方法(myObjectというのコールストアドプロシージャとリターンリスト)
private List<myObject> GetObjects(string someVar)
{
var myObjList = new List<InspectionModel>();
try
{
// call stored procedure, create new instance of object, and load up myObjList. All of this works just fine
}
catch (OracleException ex)
{
// error handling is a bit more robust. simplified for example. ex.Message, when returned to page and displayed via xhr.responseText will appear as such: "Some error message from Oracle[]"
Response.Write(ex.Message);
}
return disasterList;
}
エラーを返す方法はありますcatch {}からのメッセージをJSONオブジェクトにシリアル化できるようにしますか? myObjectにListプロパティを追加してそこにエラーを格納することを考えました。これを行うより良い方法はありますか?
なぜキャッチして、JavaScriptをエラーハンドラに返すのですか?問題は、あなたのシナリオでまだ空のリストを返すということです。これは[]にシリアル化されます。 – Fran
ストアドプロシージャが実際に理由を返すため(データがない、またはキューのデータがなくなったため)、エンドユーザーのメッセージングに役立ちます。私が500を返されたばかりの場合、クライアント側でそれを解析してORAエラーメッセージを取得する必要があります。 正直、私はそれをしなければならないのだろうか?それは500の構文解析だけで、私が望むメッセージを得る正しい方法ですか? –
catchブロックを削除し、javascriptをデバッグしてチェックアウトします。 ORAメッセージは内部例外に埋め込まれる可能性があります。私は頭の上を知らない。 – Fran