Выпадающий список не очищается - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь удалить выбранное значение из выпадающего списка, но оно все еще сохраняется.Это то же самое поведение при использовании @Html.DropDownListFor

Контроллер

public class HomeController : Controller
{

    [Route("/Home/Index")]
    [Route("/Home/Index/{Category}")]
    [Route("/Home/Index/{Category}/{Type}")]
    public IActionResult Index(HomeModel model)
    {
        // Issue is here
        // for url: home/index/accessories/test
        // "Category" is cleared if it is not valid "type"
        // but still "Accessories" remains selected in the drop down
        if (model.Type != "Electronics" && model.Type != "Furniture")
        {
            model.Category = string.Empty;
        }

        return View(new HomeModel() { Category = model.Category, Type = model.Type });
    }

Просмотр

@model WebApplication1.Controllers.HomeModel

<select asp-for="Category" asp-items="@Model.Categories"></select>
<select asp-for="Type" asp-items="@Model.Types"></select>

Модель

public class HomeModel
{
    public string Category { get; set; }

    public string Type { get; set; }

    public List<SelectListItem> Categories { get; set; } = new List<SelectListItem>
    {
        new SelectListItem() { Text="Computers & Laptops", Value="Computers-Laptops" },
        new SelectListItem() { Text="Accessories", Value="Accessories" },
    };

    public List<SelectListItem> Types { get; set; } = new List<SelectListItem>
    {
        new SelectListItem() { Text="Electronics", Value="Electronics" },
        new SelectListItem() { Text="Furniture", Value="Furniture" },
    };
}

ОБНОВЛЕНИЕ

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

 <select asp-for="Category" asp-items="@Model.Categories">
        <option value="">Select Category</option>
 </select>

1 Ответ

0 голосов
/ 02 декабря 2018

Проблема в пределах ModelState.Что происходит, когда параметры URL привязаны к модели представления, значения добавляются в словарь состояния модели.Когда представление визуализируется, не только ваш HomeModel передается в представление, но и под сценами также передается ModelState - и он имеет более высокий приоритет , чем модель представления.Поэтому, пока вы сбрасываете model.Category, клавиша Category в ModelState по-прежнему имеет значение accessories, и поэтому она выбирается в раскрывающемся списке.

Решение простое, вызовите.Clear() чтобы стереть состояние модели и заставить вашу модель обзора победить:

[Route("/Home/Index")]
[Route("/Home/Index/{Category}")]
[Route("/Home/Index/{Category}/{Type}")]
public IActionResult Index(HomeModel model) {
    // Issue is here
    // for url: home/index/accessories/test
    // "Category" is cleared if it is not valid "type"
    // but still "Accessories" remains selected in the drop down
    if (model.Type != "Electronics" && model.Type != "Furniture") {
        model.Category = string.Empty;
    }
    ModelState.Clear();
    return View(new HomeModel() { Category = model.Category, Type = model.Type });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...