Как сделать ненавязчивый Ajax-вызов в списке выбора? - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь настроить раскрывающийся список в своем приложении, который позволяет пользователям выбирать список метаданных в зависимости от того, классифицируется ли он как PII. Проблема, с которой я сталкиваюсь, заключается в том, как по существу включить логику, стоящую за @ Ajax.ActionLink (), в результаты опций и выполнить их без перехода к частичному представлению (так, как я хочу, чтобы оно отображалось на текущей странице). ).

Просмотр страницы:

    <div class="col-md-4">
        <select class="form-control" onchange="location.href = this.value">
            <option value="">Select a PII Designation List</option>
            <option data-ajax="true" data-ajax-begin="ClearMetadataResults" data-ajax-loading="#divMetadataLoading" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#divMetadata" value='@("/Applications/Metadata?applicationName=" + Model.ApplicationName + "&isPii=" + true)'>Yes</option>
            <option data-ajax="true" data-ajax-begin="ClearMetadataResults" data-ajax-loading="#divMetadataLoading" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#divMetadata" value='@("/Applications/Metadata?applicationName=" + Model.ApplicationName + "&isPii=" + false)'>No</option>
        </select>
    </div>

Буду очень признателен за любые отзывы.

1 Ответ

0 голосов
/ 25 октября 2019

После комментария Энди Стэгга я решил вместо этого настроить Ajax.BeginForm (), который будет запускаться выбором опции, которая в итоге сработала для меня.

Вот результирующий код:

<div class="row">
    <div class="col-md-4"></div>
    <div class="col-md-4">
    @{using (Ajax.BeginForm("Metadata", "Applications", new
      {
          applicationName = Model.ApplicationName,
          isPii = Model.SampleMetadataTable.IsPii
      }, new AjaxOptions
      {
          HttpMethod = "GET",
          UpdateTargetId = "divMetadata",
          InsertionMode = InsertionMode.Replace,
          LoadingElementId = "divMetadataLoading",
          OnBegin = "ClearMetadataResults"
      }, new
      {
          id = "metadataDropdownForm"
      }))
      {
        @Html.HiddenFor(model => model.ApplicationName)
        @Html.HiddenFor(model => model.SampleMetadataTable.IsPii)
        <select class="form-control" id="metadataDropdown" onchange="SubmitMetadataForm(this.value)">
            <option value="">Select a PII Designation List</option>
            <option value=true >Yes</option>
            <option value=false >No</option>
        </select>
      }}
    </div>
    <div class="col-md-4"></div>
</div>

И здесь:

<script>
function SubmitMetadataForm(x) {
    $("#SampleMetadataTable_IsPii").val(x);

    var boolValue = "";

    //console.log("Selected Dropdown option value = " + x);
    //console.log("Selected Dropdown option data type = " + typeof(x));

    //if(x == "true") {
    //    boolValue = "true";
    //}
    //else {
    //    boolValue = "false";
    //}

    //alert("Value of Application Name = " + $("#ApplicationName").val() + " and Value of IsPii = " + boolValue);

    $("#metadataDropdownForm").submit();
}

function ClearMetadataResults() {
    $("#divMetadata").empty();
}
</script> 

В идеале мне бы хотелось узнать, как настроить свой собственный помощник Ajax.DropdownList (), чтобы добиться чего-то похожего на мойНачальная настройка. Если кто-нибудь выяснит, как это сделать, прокомментируйте или ответьте!

...