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 属性在页面上应该是唯一的。

你的问题是你有多个相同的链接,Id = "attachlink"当你调用$('#attachlink')jQuery 时只使用第一个。

要解决这个问题,您应该使用类而不是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();

data-或者,您可以将所有必需的数据以属性的形式放在 ActionLink 上:

@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');

如果您在其他地方不需要隐藏字段,则可以使用这种方法将其删除。

于 2012-06-08T06:45:15.120 回答