2016-08-12 13 views
0

ページA(モデル付き)とページB(モデル付き)の2つのページがあり、どちらもHomeControllerによって読み込まれます。javaScript - MVCでパラメータとしてオブジェクトを渡す新しいビューを開く方法

public class ModelA 
{ 
    public string UserName { get; set; } 
    public int UserID { get; set; } 
} 

public class ModelB 
{ 

    public ModelB() 
    { 
     this.A = new ModelA(); 
    } 

    public ModelA A { get; set; } 

    public string Local { get; set; } 

    public string Destination { get; set; } 

} 

public class HomeController : Controller 
{ 
    public ActionResult PageA() 
    { 
     return View(); 
    } 

    public ActionResult PageB(ModelA a) 
    { 
     ModelB model = new ModelB(); 

     if (a != null) 
     { 
      model.A = a; 
     } 

     return View(model); 
    } 
} 

私のメインページはページAであり、それはあなたが見ることができるように、ページBは、だから、ページAに塗りつぶされたオブジェクトによってロードされ、ページBを呼び出します。しかし、ボタンのイベントをクリックし、オブジェクトを埋め(タイプMODELA)、その後、JavaScriptでイベントクリックページBを呼び出すには、次のとおりです。

var obj = '@Html.Raw(Json.Encode(Model.A))'; 
    var url = pageA.urlForPageB + "?a=" + obj;  
    window.location.href = url; 

このイベントは、ほぼ正常に動作します。つまり、ページBは正常に読み込まれていますが、 'a'オブジェクトはnullです。

var url = pageA.urlForPageB + "?a=" + $('form#frmPageA').serialize();   
window.location.href = url; 
をそして、それは(ページBがロードされているが、「」オブジェクトがnullである)と同じ方法でWORKD:私も試してみました。

誰でも手伝ってもらえますか?

ありがとうございます。

答えて

0

この行、かみそりは、このラインを描画

var obj = '@Html.Raw(Json.Encode(Model.A))'; 

が、それはこの

var obj = '{"UserName":"Shyju","UserID":2}'; 

のような出力をgenreatesだから我々はクエリ文字列として、それはこの

のように最終的になることを追加するとき
yourSiteName/Home/PageB?a={%22UserName%22:%22Shyju%22,%22UserID%22:2} 

モデルバインダーはこのクエリ文字列のキーと値をModelAクラスのオブジェクトにマップすることができません。

ModelBinderがクエリ文字列をModelAの有効なオブジェクトにマップするには、クエリー文字列にプロパティ名ModelAクラスに一致するキーが必要です。だから、これを生成するには

/Home/PageB?UserName=Shyju&UserID=2 

ようにする必要があり、我々はjQueryの$.paramメソッドを使用することができます。 $.paramは、jsオブジェクトをクエリ文字列に変換します。

これは動作するはずです。

var obj = @Html.Raw(Json.Encode(yourObjectOfModelA)); 
var result = $.param(obj); 
var url = "@Url.Action("PageB", "Home")?" + result; 
window.location.href = url; 

クエリーストリングには(ブラウザに基づいて)制限があります。したがって、クエリーストリングで完全なオブジェクトを送信することは必ずしも機能しません。より軽い小さなオブジェクト(上記のようなもの)に対しては、うまくいくでしょう。

関連する問題