2011-02-02 10 views
1

onclickでコントローラにアクセスしたいと思います。フォームは、別の関数のポストバックセットです。私はフォームがあれば投稿する方法を知っています。フォームを使用せずにコントローラにアクセスする方法はありますか?もしそうなら、どのようにすればいいですか?

<% using (Html.BeginForm("OneMethod", "Home", FormMethod.Post, new { id = "formNext" })) { 
<input id="addContent" type="button" onclick="addContent(ind1, ind2)"/> 
<% } %> 

jqueryの

function(addContent(ind1, ind2) { 
    //post should go to "TwoMethod" and not "OneMethod" but not sure how... 
    $.post($(this).attr("action"), $(this).serialize(), function(response) { 
     //code 
    }, 'json'); 
} 

答えて

4

ここでは、私はAJAXからそれを投稿するには書いた素敵な機能です。あなたがデータをPOSTしようとしている指定$アヤックスを呼び出すCAL

function sumbitForm(url, DetailsForm, SuccessCallBack) 
{ 
    $.ajax({ 
     url: url, 
     type: "POST", 
     contentType: "application/x-www-form-urlencoded", 
     dataType: "json", 
     data: $(DetailsForm).serialize(), 
     success: SuccessCallBack, 
     error: MyNamespace.handleAjaxError 
    }); 
} 
+0

彼の質問が示すように:「フォームがあった場合、私は投稿する方法を知っている」...... –

+0

私はあなたが同じことをやっている...私はそれをハードコーディングするのではなく、フォームからURLを取得するだけです。 –

+0

この場合、コールはコントローラのTwoMethodに行くことをどのように知っていますか? – MrM

3

はい、あなたは、単に実行します。

$("#some_ID_To_Button").click(function(){ 
$.post('/home/myaction', $("#formNext").serialize(), function(response) { 
     //code 
    }, 'json'); 
}); 

:)

0

:呼び出す

submitForm("home/twomethod", $("#formNext"),function(e){do stuff}); 

。 あなたが見ることができるように、urlプロパティはコントローラ/アクションであり、データは送信したいフィールド/プロパティのコレクションです。 ここでJSONを使用していますが、別の方法を選択することができます。

url: '<%=Url.Action("DoSomething", "Home")%>', 
data: { Name: $('#Field1').val(), MiddleName: $('#Field2').val(), Surname: $('#Field3').val() }, 

VIEW

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <input type="text" id="Field1" name="Field1" value="" /><br /> 
    <input type="text" id="Field2" name="Field2" value="" /><br /> 
    <input type="text" id="Field3" name="Field3" value="" /><br /> 
    <input type="button" id="post_data" name="post_data" value="Save" /> 

    <script type="text/javascript"> 
     $(document).ready(function() { 

      $('#post_data').click(function() { 

       $.ajax({ 
        type: 'POST', 
        url: '<%=Url.Action("DoSomething", "Home")%>', 
        data: { Name: $('#Field1').val(), MiddleName: $('#Field2').val(), Surname: $('#Field3').val() }, 
        dataType: 'json', 
        beforeSend: function(XMLHttpRequest) { 
         // You can do something before posting data. 
        }, 
        complete: function(XMLHttpRequest, textStatus) { 
         var Response = $.parseJSON(XMLHttpRequest.responseText); 
         if ((XMLHttpRequest.responseText == 'false') || (Response.Status == false)) { 
          // FAIL 
         } 
         else { 
          // SUCCESS 
          alert(Response); // Should be true. 
         } 
        } 
       }); 
      }); 


     }); 
    </script> 

</asp:Content> 

私のコントローラは、ブール値を返しますが、あなたは、オブジェクトにそれを変更することができます。

CONTROLLER:

[HttpPost] 
public JsonResult DoSomething(string Name, string MiddleName, string Surname) 
{ 
    return (Json(true, JsonRequestBehavior.DenyGet)); 
} 
関連する問題