2017-01-23 31 views
1

私はMVCアプリケーションを持っています。あるページには、ブートストラップテーブルを表示する部分的なビューがあります。私はテーブルの行がダブルクリックされたときにトリガされるいくつかのJavaScriptコードを持っています。このコードは、ダブルクリックされた行からいくつかの値を取得し、URLを構築してそのURLにナビゲートします。QueryStringを使用せずにパラメータを渡す

これはうまくいきますが、私が作成した方法では、URLにクエリーストリングとしてデータが表示されます。クエリーストリングを使わずにナビゲートするにはどうすればいいですか?ああ、可能であれば、新しいウィンドウ/タブへのナビゲーションが必要です。

ダブルクリックのための私のjavascriptのコードは次のとおりです。

$mTable.on('dbl-click-row.bs.table', function (e, row, $element) { 

     var cod = $('#hdCOD').val(); 
     var mv = mGetSelectedRow().CMonth; 
     var yv = mGetSelectedRow().CYear; 

     var diff_cv = moment.utc(cod).diff(moment.utc(yv + '-' + pad(mv, 2) + '-' + '24'), 'months', true); 
     var plcf = ''; 

     switch(true) { 
      case (diff_cv >= 2): 
       plcf = 'past'; 
       break; 
      case (diff_cv >= 1 && diff_cv < 2): 
       plcf = 'last';    
       break; 
      case (diff_cv >= 0 && diff_cv < 1): 
       plcf = 'current'; 
       break; 
      case (diff_cv < 0): 
       plcf = 'future'; 
     } 

     var url = 'ClaimMonth/ViewMonth?pn=' + mGetSelectedRow().Cpid + '&cm=' + mv + '&cy=' + yv + '&mt=' + plcf + '&cod=' + cod; 
     window.open(url, '_blank'); 
    }) 

部分図は、かみそりの構文を使用して呼び出されます。

Html.RenderAction("GetSummaryForAdmin", New With {Key .pn = Model.PersonelNo}) 

が、私はそれを模倣JavaScriptで同等の機能を見つけることができないようNew With {Key .pn = Model.PersonelNo}これがこれを行う方法であるかどうかもわかりません。私はajax呼び出しについて考えましたが、私はこれを新しいウィンドウ/タブとして開くことはできません。

助けてください。ネットワーク]タブを使用して開発ツール(クローム/ IEでF12)で、私は電話を見ることができる私は私がしたい文書を与える以下のajax.post方法を見つけた

UPDATE

...ドキュメントをプレビューすると、データが表示されます。しかし、ページはブラウザに表示されません。

新しいウィンドウ/タブで開くことは必須条件ではありませんが、持っているとよいでしょう。 ...

 $.ajax({ 
      type : "post", 
      url : "ClaimMonth/ViewMonth",    
      data : {pn: mGetSelectedRow().Cpid, cm: mv, cy: yv, mt: plcf, cod: cod },    
      success : function(response) { 
       window.open(); 
      }, 
      error : function(xhr) { 
       console.log("error"+xhr.status); 
      }, 
      complete : function() { 
      } 
     }); 

私の新しいコードは置き換え...

 //var url = 'ClaimMonth/ViewMonth?pn=' + mGetSelectedRow().Cpid + '&cm=' + mv + '&cy=' + yv + '&mt=' + plcf + '&cod=' + cod; 
     //window.open(url, '_blank'); 

と私は読んだ場合、Request.QueryString

+0

あなたはパラメータを使用してナビゲーションをしたい場合は、かなり多くのあなたは、クエリ文字列を使用する必要があります。ページ間を移動してデータを送信する他の唯一の方法は、POSTでフォーム提出を使用することです。そして、別のタブで結果を開くことができるかどうかはわかりません。もちろん、好奇心を持ったユーザーであっても、(ブラウザーツールやその他の適切なソフトウェアを介して)ネットワークを見てPOSTで渡されているパラメーターを簡単に確認することができます。なぜこのデータを非表示にしたいのですか?あなたが隠そうとしているすべての値がどこかのページで利用可能であるように見えます。 – ADyson

+0

@ADyson correct ..値は機密ではありませんが、顧客はクリーンなURLを好む。私はPostを使っていくつかのコードを見てきましたが、結果は表示されません。私の更新を見てください – Mych

+0

'window.open();'は内容のない空白のウィンドウを開くだけです。面白い所見では、URLバーにあるものに気付いたユーザー/顧客はいません。(テストシステム上にあるかどうかを気付かない場合もあります。生きているもの)、それがきちんとしているかどうか気にすることは決して気にしないでください。 – ADyson

答えて

1

あなたは意志の代わりにパラメータを受け入れるために、私のコントローラ機能を変更しましたポストバックとSessionの組み合わせを使用する必要があります。

  • AJAXサーバーに値を返信するためのAJAX投稿(既にあります)。 AJAX POSTが正常に戻ったとき、

    Public Function ViewMonth(...) As JsonResult 
        Session("SavedMonth") = New MonthObj(pn, cm, cy, mt, cod) 
    
        Return Json(True) 
    End Function 
    
  • を別のURLで新しいウィンドウを開く:そのポストバックを処理MVCアクションメソッドで

  • 、セッションに値を保存

    success : function(response) { 
         window.open('/ClaimMonth/AfterSave'); 
        }, 
    
  • このURLのMVCアクションメソッドは、セッションから保存されたデータをロードして表示します。

    Public Function AfterSave() As ViewResult 
        Dim model As MonthObj = TryCast(Session("SavedMonth"), ModelObj) 
    
        Return View(model) 
    End Function 
    
+0

ありがとうございましたbuffjape ...これは動作します。私はこれが新しいウィンドウ/タブに開くための方法があるとは思わない?このソリューションを改善するための提案が誰もない場合は、新しいウィンドウ/タブでページを開くようにしたら、終わりに答えとしてマークします。 – Mych

関連する問題