2013-01-09 3 views
5

@ Url.Actionメソッドのjavascript変数をルートパラメータとして渡したいとします。MVC3のルート値にJavascript変数を渡す

私は、actionmodeにルートパラメータとしてscreenmode javascript変数を渡すのが好きです。

私はScreenMode列挙型プロパティを持つビューモデルを持っていると はアヤックスでアクションを呼び出す必要があり、私それに基づきます。また、経路のパラメータとしてjavacript 変数を渡す必要があります。

これは私が試したことであり、コンパイルエラーです。

名「screenMode」は

$("#role-detail-form").submit(function (e) { 

    if ($(this).valid()) { 
    var screenMode = 0; 
    @{ 
    if (Model.ScreenMode == UI.ViewModel.ScreenMode.New) 
    { 
     <text> 
     screenMode =2; 
     </text> 
    } 
    } 
    $.post('@Url.Action("SaveRoleDetail", new { mode=screenMode})', 
      $(this).serialize(), function (data) { 
       $("#role-detail").html(data); 
       $.validator.unobtrusive.parse($("#role-detail")); 
      }); 
     } 
     e.preventDefault(); 
    }); 

現在のコンテキスト内に存在しない私の行動は、あなたがそれを分割し、クエリ文字列を自分で構築する必要があると思います

public ActionResult SaveRoleDetail(RoleModel viewModel, ScreenMode screenMode) 
    { 
    } 

答えて

6

あり、 Javascript変数を組み込むためです。このような

何かが何が必要です:

$.post('@(Url.Action("SaveRoleDetail"))?screenMode=' + screenMode) 

EDIT:おそらく最善の方法は、あなたがあなたのモデルでScreenMode変数を格納する必要がありますが、それのためのあなたのビューでHiddenForを置きます。次に、JavaScriptの値を変更するたびに、非表示入力の値を更新するだけで、アクション・メソッドはビュー・モデルをパラメータとして取る必要があります。 JavaScriptでフォームを投稿する場合は、$("#form").serialize()に電話して、通話後にすべてのデータを送り返すことができます。

+0

ポストajaxメソッドでこのクエリ文字列を渡すことはできますか?どのようにURLのように見えるのだろうか? screenModeはポストパラメータの一部またはクエリ文字列に含まれますか? –

+0

あなたのモデルにScreenModeを置いて、hiddenForをビューに入れて、JavaScriptの値を変更したい場合は、単純に非表示入力の値を更新してから、すべて完了したら$( "#form")。serialize();このようにして、アクションメソッドはビューモデルをパラメータとして取る必要があります:) – mattytommo

+0

はい正しいです。私は今、隠しフィールドを使用し、Javascriptで更新します。この隠しフィールドの情報をあなたの答えの一部として追加してください。だからそれは容易に目に見えるし、他の人にも役立つでしょう:) –

0

あなたはT4MVCとjQueryを使用している場合は、あなたがやってのActionResultを呼び出すことができ、次のビューで

public ActionResult SaveRoleDetail(RoleModel viewModel, ScreenMode screenMode) 
{ 
} 

$.post("@Url.Action(MVC.Home.SaveRoleDetail())", { viewModel: param1, screenMode: param2) }, function (data) { 

     //Do Work 

    }); 
+1

T4MVCとjQueryのリンクを追加すると便利です。だから人々はここから簡単にナビゲートすることができます。ありがとう –

+0

申し訳ありませんが、私はリンクを逃した。どちらもNugetパッケージとして利用できます。 T4MVcはここにあります(http:// t4mvc。codeplex.com/)とjQuery here(http://jquery.com/)これが役立つことを願っています。 – lopezbertoni

4

はまたそれが可能だコントローラで

プレースホルダを作成して置き換えます。

var url = '@Url.Action("GetOrderDetails", "Home", new { id = "js-id" })' 
      .replace("js-id", encodeURIComponent(rowId)); 
+0

私はこのアプローチを好む – Alireza

関連する問題