Как установить значение элемента HTML с использованием данных сложной модели Jquery и ASP.NET MVC 4

0

В одном из моих представлений ASP.NET MVC 4 я использую данные модели для установки значений различных элементов HTML. Я могу использовать эту модель в представлении для отображения таких значений, как:

<div>@Model.Category.Name</div> etc...

Но один из тегов div <div id="DivTotalCost"></div> должен отображать общую стоимость всех продуктов во всех категориях. Поэтому в конце представления у меня есть следующий код сценария, чтобы установить значение этого тега DivTotalCost. Но следующий код не устанавливает это значение. Я поставил инструкцию оповещения для проверки значения и отобразится предупреждение:

function(){
  return total;
}

Посмотреть:

@model MyMVC_app.Models.ProductDetails

<div>@Model.Category.Name</div> etc...
<div id="DivTotalCost"></div>

@section scripts{
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jqueryui")
    <script type="text/javascript">
        $(document).ready(function () {
            var TotalCost = function () {
                @if(Model.ProductCategoryList != null)
                {
                    var total = "";

                    foreach(var item in Model.ProductCategoryList)
                    {
                        foreach(var product in @item.products)
                        {
                            total += product.price;
                        }
                    }
                }
                return total;
            }
            alert(TotalCost);
            $('#DivTotalCost').text(TotalCost);
        });
    </script>
}

Пожалуйста помоги.

Thanks..Nam

  • 0
    Вы смешиваете javascript и бритву, у вас может быть модель представления, которая дает вам общее
Теги:
asp.net-mvc

1 ответ

1
Лучший ответ

Сначала: отображается предупреждение

function(){
  return total;
}

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

alert(TotalCost());

теперь, внутри функции, в которой вы смешиваете бритву и javascript, и оба - разные вещи и работают в разное время каждый, поэтому вы должны настроить свой код как это (не тестировалось, но вы можете получить идею)

$(document).ready(function () {
var TotalCost = function () {
               @{
                var total = 0;
                if(Model.ProductCategoryList != null)
                {   
                    foreach(var item in Model.ProductCategoryList)
                    {
                        foreach(var product in @item.products)
                        {
                            total += product.price;
                        }
                    }
                }
              }//end of razor block
                return @total;
            }
        });

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

  • 1
    Моя благодарность polirrata за помощь в обучении, указав на мои ошибки и представив исправленное решение. Я перехожу с WebForms на MVC.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню