2012-03-28 16 views
3

にJSの配列を渡すI次のコードを持っている:私はIDを取得し、配列にそれを押して、actionを埋めるgetSelectedPlaceコントローラのアクション

<form action="" onsubmit="getSelectedPlace(this);" target="_blank"> 
     <div class="wrap_input"> 
      <input type="submit" id="myDiv" class="btn buy_btn" value="Done"> 
     </div> 
     </form> 

function getSelectedPlace(form) { 
     var placesID = new Array(); 
     $(".place.green").each(function() { 
      placesID.push($(this).attr("id")); 
     }); 

     form.action = "/Pay/Buy?places=" + placesID; 
     return true; 
    } 

を。 私のアクション:

public ActionResult Buy(string[] places) 
      { 
       return new EmptyResult(); 
      } 

放火犯placesIDでは満たされています。しかし、私の行動ではplacesnullです。 string[]を単純stringに変更すると、結果は同じになります。 どこに問題がありますか?

ありがとうございました。

答えて

1

私のソリューションを使用します。
はアクションにHttpPostを追加し、フォームにmethod="POST"を追加します。

+0

のですか?新しいことを学んだ! +1 – tusar

+0

GETとPOSTの両方で動作します。以下の回答を参照してください。 –

1

stringのみを使用することをお勧めします。コンマまたは他の表記で区切ります。

public ActionResult Buy(string places) 
     { 
      string[] placesArray = places.Split(","); 
      return new EmptyResult(); 
     } 

はまたonsubmit="getSelectedPlace(this);"を使用してアクションで

function getSelectedPlace(form) { 
    var placesID = ""; 
    $(".place.green").each(function() { 
     placesID = $(this).attr("id") + "," + placesID; 
    }); 

    form.action = "/Pay/Buy?places=" + placesID; 
    return true; 
} 

は、安全ではありません。 onsubmit="return getSelectedPlace(this);"

2

伝統的なパラメータのシリアル化に注意してください。ここでは詳細:http://api.jquery.com/jQuery.param/

<script type="text/javascript"> 

    var strArray = new Array(); 

    strArray[0] = "P1"; 
    strArray[1] = "P2"; 

    var params = { data: strArray }; 

    $.ajax({ 
     type: "GET", 
     url: "/Home/Test", 
     data: params, 
     dataType: "json", 
     traditional: true 
    }); 
</script> 
} 

コントローラー:ああ、それは

public ActionResult Test(string[] data) 
{ 
    @ViewBag.Test = data[0]; // Data will be set to P1 
    return null; 
} 
関連する問題