从Razor获取动态创建的TextBox ID到jQuery

时间:2016-08-26 07:32:12

标签: c# jquery asp.net ajax

我试图从Razor视图中将动态创建的TextBox ID转换为jQuery。 ID以HTML格式创建,如下所示:

Product - 1: cartDetails_0__Quantity
Product - 2: cartDetails_1__Quantity

现在,当我将上述输入直接提供给Ajax调用时,它会更新相应的行。举个例子:

 @if (ViewBag.Cart != null)
        {
            for (int i = 0; i < cartDetails.Count(); i++)
            {
                <tr>
                    <td style="text-align: center;">@Html.TextBoxFor(model => cartDetails[i].Id)</td>
                    <td style="text-align: center;">@Html.DisplayFor(model => cartDetails[i].IP)</td>
                    <td style="text-align: center;">@Html.DisplayFor(model => cartDetails[i].ProductName)</td>
                    <td style="text-align: center;">@Html.DisplayFor(model => cartDetails[i].Price)</td>
                    <td style="text-align: center;">@Html.TextBoxFor(model => cartDetails[i].Quantity, new { @class = "quantityUpdate", data_id = cartDetails[i].Id })</td>
                </tr>
            }
        }

var url = '@Url.Action("UpdateCart2")';
$(".quantityUpdate").change(function () {
    var id = $(this).data('id');

    $('.quantityUpdate').each(function (i, item) {
        $.post(url, { id: id, quantity: $('#cartDetails_' + 0 + '__Quantity').val() }, function (response) { //cartDetails_0__Quantity - The first TextBox ID
            if (response) {
                $("#TotalPrice").load(window.location + " #TotalPrice");
            }
        });
    })
    alert($('#cartDetails_' + 0 + '__Quantity').val());
});

有没有办法循环使用jQuery来获取Razor中动态生成的TextBox ID?我尝试了以下但没有得到价值:

 $('.quantityUpdate').each(function (i, item) {
        $.post(url, { id: id, quantity: $('#cartDetails_' + i + '__Quantity').val() }, function (response) { //cartDetails_0__Quantity - The first TextBox ID
            if (response) {
                $("#TotalPrice").load(window.location + " #TotalPrice");
            }
        });
    }) 

即使尝试了这个,但它只获得第一个TextBox的值:

     $('.quantityUpdate').each(function (i, item) {
        $.post(url, { id: id, quantity: $(this).val() }, function (response) { //cartDetails_0__Quantity - The first TextBox ID
            if (response) {
                $("#TotalPrice").load(window.location + " #TotalPrice");
            }
        });
    }) 

注意:我正在尝试使用Ajax调用更新为TextBox提供输入的行。 TextBox在视图中处于循环中。在这方面,我要获取动态生成的HTML ID的ID。

1 个答案:

答案 0 :(得分:1)

您可以使用动态创建元素的create事件来获取其ID。 但请记住使用它需要使用On()。见http://api.jquery.com/on/

另见: Event binding on dynamically created elements? In jQuery, how to attach events to dynamic html elements?

PS。如果有更简洁的方法来获取动态创建的元素,我也很乐意得到它:)

编辑。也许我不够清楚。没有确切的“创造”事件。你可以将你需要的任何动作挂钩到On()

另见jQuery "on create" event for dynamically-created elements