2016-12-06 15 views
0

私は、これがずっと簡単だったと思った。私は自分のデータテーブル内のセルからデータを抽出し、コントローラ内のアクションに変数を渡すために、隠しフィールドを持つフォームを介してデータを送信する必要があります。隠し入力のフォームを生成し、アクションにサブミットする

フォームを生成することを除いて、これまで私のコードでこれと似たようなことをしています。

私はさまざまな方法を試みましたが、私のアクションでコレクションにアクセスするときに値がnullであるかどうかは関係ありません。

マイビュー機能:

$('#myTable').on('click', 'td', function() { 
      var serial = table.cell(this).data(); 


      var form = $('<form action="@Url.Action("status")" id="hiddenform"><input type="hidden" id="serial" name="serial" value=""></form>').appendTo('body'); 
      $('.serial').val(serial); 
      form.submit(); 


     }); 

と私はパースしています私のコントローラ:それはきれいに見えるので、私はこの問題を解決しようとする試みに多くのことを自分のコードを虐殺している正直に言うと

//Accept GET and POST 
    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] 
    public ActionResult Status(System.Web.Mvc.FormCollection collection) 
    { 
     string serial = collection["serial"]; 

     if (serial == null || serial == "") 
      System.Windows.Forms.MessageBox.Show("Error: Serial is NULL"); 

     return View(serial); 
    } 

ひどい。

ご協力いただければ幸いです。

コントローラに毎回エラー:シリアルはNULLポップアップが表示されます。しかし、私はJQueryをテストする場合、値がnullではない正しい値を返します。

+0

'$ valの(シリアル);'これが引き金にしようとした後(「シリアル。」)。あなたがコードを使用して値を表示し、ユーザー入力としてではなく、変更イベント。 '$( '。serial')。trigger( 'change');' – Manish

+0

@Manishこれを実装した後でも値はまだnullです。 –

答えて

1

メソッドのシグネチャを次のように変更してみましたか?

public ActionResult Status(string serial) 

ここで、serialはHTMLフォームから渡すパラメータ名です。パラメータ名は、HTMLで何とかある場合は、以下にあなたのメソッドのシグネチャを変更する必要がある場合があります

public ActionResult Status(string blah) 
0

あなたのhiddenフィールドはserialの名前とidプロパティを持っていますが、値を割り当てるために使用されるjQueryセレクタはクラスを探しています。

:シリアルのパラメータを期待する

$.post('@Url.Action("status")', { serial: table.cell(this).data() }); 

そして、あなたのコントローラを調整します

$('#serial').val(serial); 

はまた、あなたがAJAX POSTにあなたのコントローラにデータをjQueryのを使用することができます:IDによって選択するために、代わりに#を試してみてください

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Status(string serial) 
{ 
    if (serial == null || serial == "") 
     System.Windows.Forms.MessageBox.Show("Error: Serial is NULL"); 

    return View(serial); 
} 
+0

こんにちはマイク、残念ながら、この変更後もNULL値が返ってきます。 –

+0

私はこの時点で3つのことを試してみます: 1)ブラウザの開発者ツールを使って、ネットワークトラフィックを確認してください - フォーム送信時のリクエストでシリアルパラメータが送信されていますか?その時点で価値がありますか?はいの場合、問題は.NET側にあります。 noの場合: 2).val()呼び出しの前に、行にブレークポイントまたはconsole.logを挿入します。変数serialに値がありますか? 3)$( '#serial')をチェックしてください。アサーションの直後ではなく、form.submit()の前にconsole.logを使用します。それは価値がありますか? – MikeTV

+0

あなたの代替ソリューションを使用するのは理にかなっていますが、実装後にJQueryを実行するとServer 500エラーが発生します。 –

関連する問題