Как я могу правильно маршрутизировать выделение DropDownList на бритвенных страницах? - PullRequest
0 голосов
/ 10 октября 2019

Я использую SelectList в качестве раскрывающегося списка на одной из моих страниц Razor, чтобы позволить пользователям выбирать группу AD. Когда они нажимают кнопку «Установить группу», на ней должны отображаться участники этой группы. Страница в настоящее время перезагружается, без какой-либо выбранной группы.

Вот мой код для раскрывающегося списка:

<div>
    <hr />
    <dl class="row">
        <dt class="col-sm-2">
            AD Group:
        </dt>
        <dd class="col-sm-10">
            <select asp-for="ADGroup" asp-items="Model.ADGroups" onchange=""><option value=""></option></select>&nbsp;<a asp-page="./UpdateADGroup" asp-route-ADGroup="@Model.ADGroup" class="btn btn-outline-info btn-sm">Set Group</a>
        </dd>
        <dt class="col-sm-2">
            Current Members:
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Members)
        </dd>
    </dl>
</div>

Вот, как я полагаю, соответствующие части моего модельного класса:

private readonly RDSTestSiteContext _context;

public UpdateADGroupModel(RDSTestSiteContext context)
{
    _context = context;
}

[BindProperty(SupportsGet = true)]
public string ADGroup { get; set; }
public List<SelectListItem> ADGroups = new List<SelectListItem>();
[BindProperty]
public Fileset Fileset { get; set; }
[BindProperty(SupportsGet = true)]
public string Members { get; set; }

public async Task<IActionResult> OnGetAsync(long? id)
{
    if (id == null)
    {
        return NotFound();
    }

    Fileset = await _context.Fileset.FirstOrDefaultAsync(m => m.Id == id);

    if (Fileset == null)
    {
        return NotFound();
    }

    ADGroups.Add(new SelectListItem { Text = "Standard", Value = Fileset.Adgroup });
    ADGroups.Add(new SelectListItem { Text = "Restricted", Value = Fileset.Adgroup + "_R" });

    if (!string.IsNullOrEmpty(ADGroup))
    {
        GetGroupMembership(ADGroup);
    }

    return Page();
}

Если я вручную ввожу запрос в браузере, например:

full_url? ADGroup = groupname

Затем страница загружается счлены выбранных групп.

Кто-нибудь может помочь?

Было бы неплохо также установить одно из двух значений как значение по умолчанию, вместо того, чтобы оно было пустым по умолчанию или дублировало одно иззначения, установив его в теге <option></option>.

1 Ответ

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

Помощник по тегам выполняется на сервере. Атрибут asp-route-ADGroup в помощнике тега привязки не заполняется выбранной группой во время отображения страницы, поскольку в этот момент группа не была выбрана. После того, как страница выполнена и отображена в браузере, помощник по тегам не действует.

Что вы можете сделать, это создать клиентскую функцию, которая обрабатывает событие onchange вашего выпадающего списка:

function adGroupSelected(e){
    location.href = "/full_url?Group=" + e.selectedOptions[0].value;
}

Затем назначьте его текущему пустому обработчику onchange в вашем помощнике тега select:

<select asp-for="ADGroup" asp-items="Model.ADGroups" onchange="adGroupSelected(this)">...

Вам не понадобится помощник тега привязки.

...