2017-05-23 15 views
0

ボタンクリックイベントから、以下のような複雑なパラメータを使用してMVCアクションメソッドを呼び出すにはどうすればよいですか?MVCボタンクリックコールPOSTアクションメソッド

[ValidateInput(false)] 
[HttpPost] 
public ActionResult Export(ViewModel vm) 
{ 
    // some logic 
} 

私はボタンが長すぎるアクションメソッドにされている現在のページのHTMLタグを渡す必要があるので、私はそれPOSTアクション作られてきました。試し

[ValidateInput(false)] 
[HttpPost] 
public ActionResult Export(ViewModel vm, string html) 
{ 
    // some logic 
} 
+0

送信フォームに入力しようとしましたか? –

+2

そのアクション、つまりフォームの提出またはAJAXリクエストに対するPOST要求を送信する必要があります。 'location.href'はGETリクエストを行います –

+0

[ValidateInput(false)]を使用して疲れたら、それをオフにして達成しようとしているものより遅れて頭痛が増すかもしれません。 – Chad

答えて

0

のためにあなたは HTMLフォームと

その
<form action="@Url.Action("Export", "Report")" method="POST"> 
    <input type="hidden" name="html" value="ADD YOUR HTML HERE"> 
    <input type="button" value="Detail" /> 
</form> 

を行うことができ、あなたのコントローラ内で使用すると、HTML形式のパラメータを使用する必要がありますこの

<form action="@Url.Action("Export", "Report")" method="POST"> 
<input type="hidden" name="html" id="html" value="ADD YOUR HTML HERE"> 
<input type="button" id="btn1" value="Detail" /> 
</form> 

あなたはJSでのボタンのイベントをクリックして購読することができますクリックして、ボタンを使用してこれを実行したい場合は、あなたの方法で文字列のHTML

+0

クエリ文字列が第2パラメータから長すぎるため – CSharped

+0

あなたはデータをPOSTするときにその制限を達成していません( "エクスポート"、 "レポート")%> "/> –

0

を私はこれを試してみましたが、これはそのGET操作

<input type="button" value="Detail" onclick="location.href='@Url.Action("Export", "Report")?html=' + $('#test').html()" /> 
1

をPARAMを追加JS

$("#btn1").click(function(){ 
    $("#html").val($('#test').html()); 
}) 

にスクリプトを追加します。

レイザー:

<input type="button" value="Detail" id="buttonId" /> 

JS:

$('#buttonId').click(function() { //On click of your button 

    var property1 = $('#property1Id').val(); //Get the values from the page you want to post 
    var property2 = $('#property2Id').val(); 


    var JSONObject = { // Create JSON object to pass through AJAX 
Property1: property1, //Make sure these names match the properties in VM 
Property2: property2 
}; 

    $.ajax({ //Do an ajax post to the controller 
     type: 'POST', 
     url: './Controller/Action', 
     data: JSON.stringify(JSONObject), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json" 
     }); 

もう一つの方法にあなたのJSでは、あなたのアクションにJSONオブジェクト(あなたのVM)を掲載しますアヤックスのポストを行うことができますこれは、フォームを使用してビューモデルを送信することです。

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 

<div class="form-horizontal"> 

    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 

    <div class="form-group"> 
     @Html.LabelFor(model => model.PropertyName1, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      <input type="text" id="PropertyName1" name="PropertyName1" class="form-control" /> 
      @Html.ValidationMessageFor(model => model.PropertyName1, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.PropertyName2, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.PropertyName2, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.PropertyName2, "", new { @class = "text-danger" }) 
     </div> 
    </div> 



    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Button text" class="btn btn-primary" /> 
     </div> 
    </div> 
    </div> 
} 
関連する問題