Member 12285600 Ответов: 1

Передача переменной из модели частичного представления в родительское представление - ASP.NET


Привет

У меня есть мое частичное представление, которое возвращает только одну переменную из модели. Однако мне нужна переменная для моих событий javascript to action на родительской странице, и я не уверен, как мне это сделать? ниже приведены примеры моего кода, который у меня есть до сих пор.

PartialView -
<div class="wrapper">

    <div id="colour" class="center" style="background-color: blue !important;">
        
    </div>

    <h2 class="txt" style="font-weight: 500;"> @Model.cntCalls/20</h2>
    <h4 class="txt">Calls made this week </h4>

</div>



Фрагмент кода из родительского представления

                <h3>Lapsed and Prospect Call Report Summary</h3>
                @Html.Action("StatusReview")
            </div>
        </div>
    </div>
</div>


@section scripts{
    <script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
    @*<script src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>*@
    <script type="text/javascript">

window.onload = function () {

    if (qty == 20) {
        console.log(qty);
        $('#colour').css('background', 'linear-gradient(60deg, #66bb6a, #43a047)');
        $('#colour').css('box-shadow', '0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px - 5px rgba(76, 175, 80, 0.4)');
        $('#phone').css('color', '#7ed682'); 

    }
    if (qty >= 15 && qty < 20) {
        $('#colour').css('background', 'linear-gradient(60deg, #ffa726, #fb8c00)');
        $('#colour').css('box-shadow', '0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px rgba(255, 152, 0, 0.4)');
        $('#phone').css('color', '#ffc474');
    }
    if (qty < 15) {
        $('#colour').css('background', 'linear-gradient(60deg, #ef5350, #e53935)');
        $('#colour').css('box-shadow', '0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px rgba(244, 67, 54, 0.4)');
        $('#phone').css('color', '#e89999'); 
    }

}
    </script>
}


Может кто-то пожалуйста, помогите мне ?

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

испытания и исследования на различных объектах

F-ES Sitecore

Если вам нужны данные в главном представлении, то я был бы склонен делать все, что делает "StatusReview" в вашем основном действии, чтобы ваша модель содержала не только данные, необходимые для "родительской" страницы, но и данные, необходимые для вашего частичного представления. Затем вы можете использовать @Html.Partial вместо @Html.Действие

@Html.Partial("_myView.cshtml", модель)

или передать просто один бит данных, которые вам нужны

@HTML-код.Частичная("_myView.cshtml по -", модель.cntCalls)

Измените директиву @model в частичном представлении, чтобы она соответствовала модели родительской страницы, если вы передадите всю модель (первый пример), или "int", или любой другой тип cntCalls, если вы выберете второй пример.

1 Ответов

Рейтинг:
10

Vincent Maverick Durano

Цитата:
У меня есть мое частичное представление, которое возвращает только одну переменную из модели. Однако мне нужна переменная для моих событий javascript to action на родительской странице, и я не уверен, как мне это сделать?


Если вы имеете дело только с одним свойством, то самый быстрый и грязный способ-это использовать JavaScript непосредственно для доступа к вашему PartialView переменная для вашего родителя View. Например:

Вы можете сделать что-то подобное в своем PartialView:
<label id="lblCount" class="lblCount">@Html.DisplayFor(model => model.cntCalls)</label>


идея состоит в том, чтобы сохранить вашу переменную в HTML-теге с присвоенным ей идентификатором/именем класса, чтобы вы могли ссылаться на них в своем коде JavaScript.

Как только вы это сделаете, вы можете сделать что-то подобное в своем родительском представлении (это должно быть помещено в самую нижнюю часть вашего представления):

использование Jquery
@section scripts{
    <script>
        $(function () {
            var $count= $(".lblCount").text();
            //do something with the count value here
        });
    </script>
}


Или с помощью обычного JavaScript

var count = document.getElementById("lblId").innerHTML;


Кроме того, вы можете следовать тому, что вам предлагает F-ES Sitecore.