Member 11559488 Ответов: 1

Как получить доступ к подэлементам div, созданным циклом foreach в представлении MVC с помощью jquery


Вот мой взгляд :
<div class="row">
@foreach (var item in Model.Product)
{
            <div class="col-lg-3 col-md-6" id="@item.ProductId" name="div">
                 
                <div class="panel panel-green" style=" border-radius: 25px; border: 1px solid #47d7ac;">
                    <div class="panel-heading">
                        <div class="row">
                            <div class="col-xs-12 ">
                                <h4 class="text-center" id="ProductName">@item.Name</h4>
                                <div class="img-responsive">
                                    <img src="@item.ImageUrl" class="img-responsive img-thumbnail" id="@item.ImageUrl" />
                                </div>
                               
                            </div>
                        </div>
                    </div>
                    <div class="panel-footer" style="background-color:transparent">
                        <div class="row">
                            <p id="description" style="text-align:center">@item.Description</p>
                        </div>
                        <div class="row">
                            <div class="col-md-6">
                                <h4 class="pull-left">₹ <span id="Cost" class="Cost">@item.Cost</span></h4>
                            </div>
                            <div class="col-md-6">
                                <input type="submit" class="btn btn-primary regbtn center-block" id="buy" style="width:auto" value="Buy" />
                            </div>
                           </div>
                      <div class="clearfix"></div>
                        </div>
                   

                </div>
              
            </div>
}
</div>


при нажатии на каждую покупку я хочу получить этот контент div и передать его на следующую страницу через ajax

Что я уже пробовал:

<script>
    $(document).ready(function () {
        var div = $('[name=div]').attr('id');
        
        $("#" + div).find($("#buy")).click(function () {
            var name = $("#" + div).find( $("#ProductName"+div)).text();
            var desc = $("#description" + div).text();
            var cost = $("#Cost"+div).text();
            var img = $("#img"+div).attr('src');
            alert(name);
            $.ajax({
                url: '@Url.Action("GetOrder", "Home")',
                data: { "Name": name,"Desc":desc,"Cost":cost,"ImgUrl":img},
                type: 'POST', // add
                success: function (data) {
                    window.location.href = data;
                    }
            });
           
        });
    });
</script>

F-ES Sitecore

Вы не можете использовать идентификаторы, каждый идентификатор должен быть уникальным на странице. Вместо этого пометьте соответствующие элементы тегом "data -", так что что-то вроде

в <тип входного="отправить" класс="БТН БТН-первичный центр-блок regbtn" тип данных="купить" стиль="ширина:авто" стоимости="купить" /&ГТ;

затем обновите свой запрос для поиска

.найти("[тип данных= "купить"]")

Могут быть и другие проблемы с вашим кодом, но это, безусловно, одна из них.

1 Ответов

Рейтинг:
0

Richard Deeming

Как уже упоминалось в комментариях, вам нужно будет исправить свои дубликаты идентификаторов и использовать data- атрибуты.

Смотреть:

<div class="row">
    @foreach (var item in Model.Product)
    {
        <div class="col-lg-3 col-md-6">
            <div class="panel panel-green" style=" border-radius: 25px; border: 1px solid #47d7ac;">
                <div class="panel-heading">
                    <div class="row">
                        <div class="col-xs-12 ">
                            <h4 class="text-center">@item.Name</h4>
                            <div class="img-responsive">
                                <img src="@Url.Content(item.ImageUrl)" class="img-responsive img-thumbnail" />
                            </div>
                        </div>
                    </div>
                </div>
                <div class="panel-footer" style="background-color:transparent">
                    <div class="row">
                        <p class="text-center">@item.Description</p>
                    </div>
                    <div class="row">
                        <div class="col-md-6">
                            <h4 class="pull-left">₹ <span class="Cost">@item.Cost</span></h4>
                        </div>
                        <div class="col-md-6">
                            <input type="submit" class="btn btn-primary regbtn center-block -js-buy-button" style="width:auto" value="Buy" data-name="@item.Name" data-description="@item.Description" data-cost="@item.Cost" data-image="@item.ImageUrl" />
                        </div>
                    </div>
                    <div class="clearfix"></div>
                </div>
            </div>
        </div>
    }
</div>
Скрипт:
$(document).ready(function () {
    $(document).on("click", ".-js-buy-button", function(event){
        event.preventDefault();
        
        var me = $(this);
        var name = me.data("name");
        var description = me.data("description");
        var cost = me.data("cost");
        var image = me.data("image");
        
        console.debug("Name", name, "Description", description, "Cost", cost, "Image", image);
        
        $.ajax({
            url: '@Url.Action("GetOrder", "Home")',
            data: { "Name": name, "Desc": description, "Cost": cost, "ImgUrl": image },
            success: function(data){
                window.location.href = data;
            }
        });
    });
});


ОДНАКО- это кажется плохой идеей. В настоящее время пользователь может просто использовать инструменты разработчика своего браузера, чтобы изменить цену продукта, прежде чем нажать кнопку "Купить", и похоже, что ваш код просто примет новую цену, не проверяя ее.

Вы также не передаете идентификатор продукта, поэтому я подозреваю, что структура вашей базы данных нарушена. Вместо копирования сведений о продукте в строку заказа следует использовать связь внешнего ключа между строкой заказа и таблицами продуктов.

Вы должны передать только идентификатор продукта в код сервера. Затем ваш код может использовать этот идентификатор для извлечения любых необходимых ему сведений из таблицы products.