LoginSignup
0
0

More than 5 years have passed since last update.

Actionの結果でViewBagに詰めるようなことをしたい。

Last updated at Posted at 2016-03-16

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0