0

私はasp.net MVC3を使用しています私のビューでは、テーブルにテーブルを表示しています。「ファイルを添付」と呼ばれる各行のリンクがあります。このリンクは、ajax呼び出しを介してコントローラー関数を呼び出します

@Html.HiddenFor(modelItem => item.CourseID, new { @id = "CourseID", @Class="courseiding"})
@Html.HiddenFor(modelItem => item.PrtfID, new { @id = "prtfID" , @Class="prtfiding"})
@Html.ActionLink("Attach a file", "Index", null, new { @Id = "attchlink" })

アヤックス:

 $('#attchlink').click(function (e) {
        window.formCount = 0;
        e.preventDefault();
       var id = $('.prtfiding').val();
        var size1 = $('.sizing').val();
        var url2 = '@Url.Action("Index")';
        $.ajax({
            url: url2,
            data: { pid: id, size: size },
            cache: false,
            type: 'POST',
            success: function (data) {
                $('#result').html(data);
            }
        });
    });

これはすべての行で機能していますが、id と size で値を渡している間...すべての行に対してのみ最初の行の値を渡しています

4

1 に答える 1

1

要素のId 属性は、ページ上で一意である必要があります。

あなたの問題は、同じリンクが複数あり、最初のリンクだけを使用して jQueryId = "attachlink"を呼び出す場合です。$('#attachlink')

これを解決するには、代わりにクラスを使用する必要がありますId

@Html.ActionLink("Attach a file", "Index", null, new { @class = "attachlink" })

$('.attachlink').click(function (e) {

}

次に、この関数を使用して.closest()、クリック イベントで「最も大きな」値を取得できます。

var id = $(this).closest('.prtfiding').val();
var size1 = $(this).closest('.sizing').val();

または、必要なすべてのデータを ActionLink にdata-属性の形式で配置することもできます。

@Html.ActionLink("Attach a file", "Index", null, 
    new 
    { 
         @Id = "attchlink",
         data_courseID = item.CourseID,
         data_prtfID = item.prtfID
    })

そしてあなたのjs関数では、次のようにアクセスできます:

var courseID = $(this).data('courseID');
var prtfID = $(this).data('prtfID');

他の場所で Hidden フィールドが必要ない場合は、このアプローチでそれらを削除できます。

于 2012-06-08T06:45:15.120 に答える