2016-12-06 15 views
1

私はこのコードを書くビューページでのasp.net MVCでの新たなんだとHTMLテキストボックスの値を読み、コントローラのアクションメソッドの引数にそれを送りたい、その目的のために:中
Url.Actionでhtmlテキストボックスの値をコントローラアクションメソッドの入力引数に送る方法はありますか?

<a href="@Url.Action("Item", "Store", new {parentPartId = @item.Id,UserID=12})">@item.BookName</a> 


このセグメントのurl action
ユーザーID = HTMLテキストボックスの値
読み出し値とコントローラにこのアクションに送信:

public ActionResult Item(int parentPartId,int UserID) 
     { 
} 

<input type="text" id="USERID"/> 


どのように私はその問題を解決することができ感謝:?ビューページで は私のテキストボックスはこれです。

+0

オプション1:テキストボックスをフォームに配置し、ユーザーがフォームを(ボタンを使用して)送信しますあなたは言及しました。これにより、テキストボックス内の値が引数としてコントローラに渡されます。テキストボックス名がパラメータ名と一致していることを確認する必要があります。オプション2:ユーザーがリンクをクリックしたときに、JavaScriptを使用してテキストボックスの値を収集します。これを使用して、URLに値を配置してから、リンクをトリガーできるようにします。 – ADyson

+0

@ADysonオプション2はどのように使用できますか? –

+0

リンクにhrefを直接設定しないでください。クリックイベントを処理します。通常のリダイレクト動作を停止するには、preventDefaultを使用してください。 '@ item.Id'を" PARENT_ID "のようなプレースホルダ文字列に変更することを除いて、Url.Actionヘルパの値を含む変数を作成します。生成されたURLを取得し、文字列置換関数を使用してPARENT_IDをテキストボックスの値に切り替えます。次に、ユーザーをこの新しく生成されたURLにリダイレクトします。 – ADyson

答えて

1

あなたは、ハイパーリンクのクリックイベントを処理することができますし、このように、それにテキストボックスから値を挿入します

HTML:

<a class="BookName" href="" data-id="@item.Id">@item.BookName</a> 

スクリプト(あなたはjQueryのを持っていますが、簡単に再前提としてい-writableていない場合):

$(".BookName").click(function(event) 
{ 
    event.preventDefault(); 
    var url = '@Url.Action("Item", "Store", new {parentPartId = "PARENT_ID",UserID="USER_ID"})'; 
    url = url.replace("USER_ID", $("#USERID").val()); 
    url = url.replace("PARENT_ID", $(this).data("id")); 
alert(url); //just for debugging 
    window.location.href = url; 
}); 

あなたはこれを行う前に、入力値が有効であることをチェックすることがありますが、これは、あなたが開始されます。モデル/ Formコレクションを経由して、フォームを配置し、データをポストする必要が

+0

これは非常に不精なコードです。 –

+0

ありがとう、私はそれを実行し、このエラーが表示されます:パラメータ辞書 'System.Int32' nullable型のパラメータ 'UserID'のnullエントリが含まれていますメソッド 'System.Web.Mvc.ActionResult Item(Int32、Int32)' 'StoreProject.Controllers.StoreController'にあります。オプションのパラメータは、参照型、null可能型、またはオプションのパラメータとして宣言する必要があります。 パラメータ名:パラメータ –

+0

@behibehiクリックする前にUSERIDテキストボックスに数値を書き込んでいませんか?私はコードに「アラート」を挿入していますので、URLが送信前に正しく表示されているかどうかを確認できます。問題がある場合は、ここに出力して確認できます。 – ADyson

1

テキストボックスの値は動的です。ユーザーの入力によって異なります。 Razorタグはサーバーでコンパイルされ、クライアントにポストされています。あなたのひげ剃りコードは、テキスト領域に何をするのかを理解できません。テキストボックスの値を決定してサーバーに送信する方法をトリガーするアクションが必要です。 ajax関数を使用することができます。 Jqueryのヘルプ。

私は@itemがループ変数だと思います。あなたは、私はIDをキャッチし、paramenterとしてダウン型参照として あなたは

<a onClick="myFunction(@item.id)">@item.BookName</a> 

以下のようにコードを変更することができます。 これはあなたのテキスト領域

<input type="text" id="USERID"/> 

これは、テキストボックスの値を取得し、あなたの行動

function myFunction(id){ 
    var userId = document.getElementById("UserID").value; 
    var data ={ 
     parentPartId:id, 
     UserID:userId 
    } 

    $.ajax({   //Jquery stuff 
      url : '/Store/Item' 
      type:'POST', 
      data:data 
      dataType:'json' 
      success:function(){//You can handle succes scenario} 
     }); 
} 

それはJSONオブジェクトであるデータの構造を参照してくださいに送信javascript関数です。パラメータ名は、アクションパラメータと同じです。あなたがそれを送るとき。 MVCはロジックを理解し、パラメータと値を一致させます。 )

+0

これは同じ振る舞いを直接的に再現するものではありません - ajaxリクエストは、リンクをクリックして実行されるリダイレクトと同じではありません。 jQuery(.ajax関数)が必要なサンプルを提供する場合は、jQuery構文を使用してイベントハンドラを宣言してください。インラインイベントは、一般的に悪い習慣、jQueryと見なされます。また、URL.Actionを使用して正しいURLが生成されていることを確認してください。それ以外の場合は、MVCルーティング設定およびデプロイされた環境の設定によっては間違っている可能性があります。 – ADyson

+0

jqueryについて私の投稿を編集しました。一方、私は「発生する」問題があるとは思わない。それはなぜでしょう? –

+0

私は言ったように、別のルーティング設定がデフォルトよりも使用されている場合、またはサイトがIIS Webサイト/仮想ディレクトリのルートフォルダに展開されていない場合、問題が発生する可能性があります。アクションのURLを取得するための数式は、常に簡単だとは想定できません。人々がこれに問題を経験したので、そこにはたくさんの質問があります。 – ADyson

-1

ビューコード

@using (Html.BeginForm("SaveData", "TestCont", FormMethod.Post, new { Id = "frmTest", enctype = "multipart/form-data" })) 
{ 
    @Html.AntiForgeryToken() 
    <input type="text" id="USERID" name="UserID"/> 
} 

コントローラ:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult SaveData(FormCollection form) 
{ 
    string html = Convert.ToString(form["UserID"]); 
} 

[ValidateInput(false)]をマークすることを確認し、それ以外の場合はエラーが発生しますon html掲載

フォームを送信するフォームでサブフォームを送信するか、JavaScriptで使用するかを指定します。$('#frmTest').submit()

+1

ここでは、 'enctype =" multipart/form-data "'は不要です。ファイルをアップロードする場合にのみ必要です。 "FormCollection"とは何ですか?このメソッドのシグネチャはOPの例とは異なり、奇妙な方法でUserIDを取得しているため、MVCモデルのバインダを迂回して明白な理由はありません。 – ADyson

+0

はい、ファイルをアップロードしていない場合はこれを削除できます。 –

+1

私は些細なことではありません。コードを正しく理解していないと思われるものがあることを指摘していました。組み込みの検証を抑制する - フレームワークに組み込まれている貴重なセキュリティとサニティチェック機能をなぜ捨てるのでしょうか?このシナリオには奇妙なことはありませんが、それは単純なデータを提出するのは非常に標準的な状況です。 – ADyson

関連する問題