Как проверить много значений внутри скрипта в ASP.NET MVC 4? - PullRequest
0 голосов
/ 03 апреля 2019

Я могу легко показать / скрыть <div> на основе этого кода:

<div class="form-group">
  @Html.LabelFor(m => m.countryID, new { @class = "col-md-2 control-label" })
  <div class="col-md-10">
    @Html.DropDownListFor(m => m.countryID, ((IEnumerable<Corporate.Models.Country>) ViewBag.Possiblecountries).OrderBy(c =>  c.countryName).Select(option => new SelectListItem
    {
       Text = Html.DisplayTextFor(_ => option.countryName).ToString(),
       Value = option.countryID.ToString(CultureInfo.InvariantCulture),
       Selected = (Model != null) && (option.countryID == Model.countryID)
    }), new { @class = "form-control" })
    @Html.ValidationMessageFor(m => m.countryID, "", new { @class = "text-danger" })
  </div>
</div>

<div class="form-group" id="vatNumberDiv">
    @Html.LabelFor(m => m.vatNumber, new {@class = "col-md-2 control-label"})
    <div class="col-md-10">
        @Html.TextBoxFor(m => m.vatNumber, new {@class = "form-control"})
        @Html.ValidationMessageFor(m => m.vatNumber, "", new {@class = "text-danger"})
    </div>
</div>

и на основании этого сценария:

<script type="text/javascript">
$(function () {
    $('#countryID').change(function () {
        var value = $(this).val();
        if (value == 'FRA') {
            $('#vatNumberDiv').show();                
        } else {
            $('#vatNumberDiv').hide();               
        }
    });
});
</script>

а как насчет проверки всех членов ЕС? У меня есть метод с именем bool IsMemberEU(), для выполнения которого требуется контекст MVC. Могу ли я назвать это внутри сценария?

Может быть, лучше сгенерировать по коду все опции внутри скрипта? Что-то вроде:

if (value == 'FRA' ||
    value == 'DEU' ||
    value == 'ITA' ||
    ...
    ...
   ) {

У меня есть другой вариант?

Спасибо.

EDIT:

Это код, который мне нужен, чтобы проверить, является ли страна членом ЕС:

foreach(Country c in context.Countries)
{
   if (IsMemberEU(c))
   {
      // is EU memeber
   }
}  

EDIT2: Для M12 Bennet

<script type="text/javascript">
// $(function () {
$(document).ready(function() {
    $('#countryID').change(function () {

        // get selected option to submit to method IsMemberEU
        var selectedOption = $(this).val();

        // create URL for ajax call
        var ajaxUrl = '@Url.Action("IsMemberEU", "Customers")';

        $.ajax({
            url: ajaxUrl,
            data: { countryAbbv: selectedOption },
            success: function(result) {

                if (result) {
                    $("#vatNumberDiv").show();

                } else {
                    $("#vatNumberDiv").hide();

                }

                // show result of ajax call in the `p` element on page.  This is just testing to see if ajax call worked.
                // this can be done with console.log(result) as well.
                $("#ShowResult").text(result);
            },
            error: function(xhr, status, error) {
                console.log(xhr);
            }


        });
    });
});
</script>

1 Ответ

0 голосов
/ 03 апреля 2019

В контроллере вы можете создать метод IsMemberEU(string countryAbbv). Он должен принимать параметр, потому что вы проверяете, что вы отправляете в метод. Таким образом, ваш код может выглядеть так:

Метод контроллера

public bool IsMemberEU(string countryAbbv)
{
    var lstCountries = db.Countries.Where(x => x.isEU).Select(t => t.Abbr).ToList();

    return lstCountries.Contains(countryAbbv);
}

Затем на вашей странице Razor / HTML:

Бритва / HTML

<div>
    <select id="CountrySelect" name="countryAbbv">
        <option value="">-- Select Country --</option>
        <option value="FRA">FRA</option>
        <option value="DEU">DEU</option>
        <option value="ITA">ITA</option>
        <option value="USA">USA</option>
    </select>

    <p id="ShowResult"></p>
</div>

Затем в вашем jQuery включить AJAX:

JQuery / AJAX

<script>
    $(document).ready(function() {

        // create event listener for change of select
        $("#CountrySelect").change(function() {

            // get selected option to submit to method IsMemberEU
            var selectedOption = $(this).val();

            // create URL for ajax call
            var ajaxUrl = '@Url.Action("IsMemberEU", "Home")';

            $.ajax({
                url: ajaxUrl,
                data: { countryAbbv: selectedOption },
                success: function(result) {
                    if (result)
                        $("#vatNumberDiv").show();
                    else
                        $("#vatNumberDiv").hide();
                },
                error: function(xhr, status, error) {
                    console.log(xhr);
                }
            });
        });
    });
</script>

Это работает, как и ожидалось, с моей стороны. Теперь, это просто базовый пример, который я создал сам на основе информации, представленной в вопросе. Вам не нужно беспокоиться о предоставляемом мною HTML / Razor, поскольку вы используете синтаксис Razor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...