TestアクションのようなメソッドがJson形式で結果を返す場合にはViewBagにデータを詰めても値がセットされていなかった。下記のような疑似コードで、どうやって値を返すべきか悩んだのでメモ書き。
public ActionResult Test()
{
var ret = GetAll();
if( ret == 0 ) {
ViewBag.Message = "データなし";
return this.Json(null , JsonRequestBehavior.AllowGet);
}
return this.Json(ret, JsonRequestBehavior.AllowGet);
}
$.ajax({
type: 'get',
url: '↑のアクション'
})
.done(function(data) {
ViewBag.Messageがあればエラーをだす。
});
結局のところViewメソッドの呼び出しがないので、cshtmlでは画面描画更新が走っていないはず。つまりViewBagで参照しようとしてもデータが設定されていない。
Json形式で返すなら、全部Jsonで返すのが手っ取り早いみたい。
結局、こんな感じに変更した。
※Jsonメソッドに渡す際に、匿名クラスで実装して、プロパティを増やす方法。
public ActionResult Test()
{
var ret = GetAll();
if( ret == 0 ) {
return this.Json(new{ message="データなし", data = "" } , JsonRequestBehavior.AllowGet);
}
return this.Json(new{ message="", data = ret } , JsonRequestBehavior.AllowGet);
}
$.ajax({
type: 'get',
url: '↑のアクション'
})
.done(function(data) {
if(data.message !== "") {
alert(data.message); // ここでサーバでメッセージを出す。
retrun false;
}
var resData = data.data; // もともと返していたJson形式のデータ
~省略~
});
参考サイト
http://stackoverflow.com/questions/12642143/mvc-use-c-sharp-to-fill-viewbag-with-json-action-result