0

ajaxの控えめなフォーム送信でmvc3のJavaScriptアクションからコントローラーアクションにIDを渡す方法

私のスクリプト

   <script type="text/javascript">
    $(document).ready(function () {
        $("#tblclick td[id]").each(function (i, elem) {

            $(elem).click(function (e) {
                var ID = this.id;
                alert(ID);
               // var url = '@Url.Action("Listpage2", "Home")'; 
                var data = { Id: ID };
//                  $.post(url,data, function (result) {
//                 }); 
                e.preventDefault();
                $('form#myAjaxForm').submit();
            });
                       });
    });
</script>

$('form#myAjaxForm')。submit();を使用してIDを渡す方法。代わりにコントローラーに

$.post(url,data, function (result) {
    //                 }); 

私の見解

 @using (Ajax.BeginForm("Listpage2", "", new AjaxOptions
            {
                UpdateTargetId = "showpage"
            }, new { @id = "myAjaxForm" }))
            {

                <table id="tblclick">
                    @for (int i = 0; i < Model.names.Count; i++)
                    {
                        <tr>
                            <td id='@Model.names[i].Id'>
                                @Html.LabelFor(model => model.names[i].Name, Model.names[i].Name, new { @id = Model.names[i].Id })
                              <br />
                            </td>
                        </tr>
                    }
                </table>

            }
        </td>
        <td id="showpage">
        </td>
4

3 に答える 3

1

$ .postについてはよくわかりませんが、window.locationがうまく機能することはわかっています。代わりにこれを使用してください。うまくいけば、良い結果が得られます:)

window.location = "@(Url.Action("Listpage2", "Home"))" + "Id=" + ID;

$('form#myAjaxForm')。submit();を置き換えます。このコードでは、jscriptに明らかに問題があるようには見えません。

于 2012-08-27T14:15:01.323 に答える
1

私は AjaxBeginformヘルパー メソッドの使用を避け、このような純粋な手書きのきれいなJavaScript を実行します。

<table id="tblclick">
  @foreach(var name in Model.names)
  {
    <tr>
     <td id="@name.Id">
           @Html.ActionLink(name.Name,"listpage","yourControllerName", 
                         new { @id = name.Id },new { @class="ajaxShow"})         
     </td>
    </tr>
   }
</table>

<script>
 $(function(){
    $(".ajaxShow")click(function(e){
       e.preventDefault();
       $("#showpage").load($(this).attr("href")); 
    });
 });
</script>

これにより、for each ループでアンカー タグのマークアップが次のように生成されます。

<a href="/yourControllerName/listpage/12" class="ajaxShow" >John</a>
<a href="/yourControllerName/listpage/35" class="ajaxShow" >Mark</a>

ユーザーがリンクをクリックすると、jQuery 関数を使用して、アクション メソッドloadからの応答を id の div に読み込みます。listpageshowPage

listpageアクション メソッドが id パラメータを受け入れ、何かを返すと仮定します。

于 2012-08-27T14:20:37.190 に答える
0

html属性IDを持つテキストボックスヘルパーを使用するだけです。

@Html.TextBox("ID")

あなたもこれを行うことができます:

 var form = $('form#myAjaxForm');
 $.ajax({
       type: "post",
       async: false,
       url: form.attr("action"),
       data: form.serialize(),
       success: function (data) {
          // do something if successful
          }
 });
于 2012-08-27T14:09:40.387 に答える