SelectediAlertIndex из SelectTagHelper (по-видимому) не передается в Index.cshtml из LoadAlert (…)… RedirectToAction («Index», «Alerts») - PullRequest
0 голосов
/ 27 августа 2018

Борьба с получением SelectedAlertIndex (int) со страницы просмотра AspNetCore MVC:

 @{
    <h4>@Model.Alerts.Count Alerts</h4>
    <form asp-controller="Alerts" asp-action="LoadAlert" method="post">
        <select asp-for="SelectedAlertIndex" asp-items="@Model.Alert_Identifiers">
            <option>Select one</option>
        </select>
        <br />
        <input type="submit" name="LoadAlert" value="LoadAlert" />
    </form>
}

через AlertsController.cs:

[HttpPost]
public IActionResult LoadAlert(Alert obj, string LoadAlert)
{
    if (!string.IsNullOrEmpty(LoadAlert))
    {
        ViewBag.Message = "Alert loaded successfully";
    }
    return RedirectToAction("Index", "Alerts")
}

в цикл @foreach внутри таблицы в представлениях / оповещениях/Index.cshtml:

@model IEnumerable<edxl_cap_v1_2.Models.ContentViewModels.Alert>
…
<table id="elementTable" class="smallText">

    @foreach (var item in Model)
    {

        @*@while(item.AlertIndex == item.SelectedAlertIndex)
        {*@
        <tr>

Без вложенного цикла @ while, таблица строк, по одной для каждого элемента данных, отображает все три записи по 13 элементов данных в каждой, но мне нужно отобразитьнабор из 13 элементов данных для одной выбранной записи с использованием значения int для AlertIndex, выбранного из выпадающего списка Select Tag Helper.Если я раскомментирую цикл @ while, отображается только граница элемента elementTable без строк.Это также происходит, когда я пытаюсь добавить предложение «Where» в цикл @foreach:

@foreach (var item in Model.Where(item => item.AlertIndex == item.SelectedAlertIndex))
{

Я пытаюсь показать только соответствующий код для проблемы, но на всякий случай, вот основная модель:

public class AlertViewModel
{
    public int SelectedAlertIndex { get; set; }
    public List<SelectListItem> Alert_Identifiers { get; set; }
    public List<AlertVm> Alerts { get; set; }
}

public class AlertVm
{
    [Key]
    public int AlertIndex { get; set; }
    [MaxLength(150)]
    public string Alert_Identifier { get; set; }
}

Я решил, что, вероятно, нет необходимости показывать класс Alert из 13 элементов, которые я добавил в модель представления из исходного класса Alert.cs.

1 Ответ

0 голосов
/ 03 сентября 2018

Мне нужно было изменить значение asp-action в использовании помощника по тегу формы на Index:

@{
    <h4>@Model.Alerts.Count Alerts</h4>

    <form asp-controller="Alerts" asp-action="Index" method="post">
        <select asp-for="SelectedAlertIndex" asp-items="@Model.Alert_Identifiers">
            <option>Select one</option>
        </select>
        <br />
        <input type="submit" name="Index" value="LoadAlert" />
    </form>
}

Затем мне нужно было убедиться, что SelectedAlertIndex было написано одинаково во всех случаях;изменил его тип на Nullable int (int?);поставить нулевую проверку в действии HttpPost Index ();и добавьте Where условие:

[HttpPost]
    public IActionResult Index(Alert obj, int? SelectedAlertIndex)
    {
        if (SelectedAlertIndex.HasValue)
        {
            ViewBag.Message = "Alert loaded successfully";
        }
        return View(_context.Alert.Where(x => x.AlertIndex == SelectedAlertIndex));
    }

Большое спасибо @ Shyju

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