Как показать установленную кнопку-переключатель в режиме редактирования Razor Asp net core mvc - PullRequest
0 голосов
/ 06 февраля 2019

Несмотря на код ядра сети Asp в представлении Razor:

@model List<SelectListItem>
<form asp-controller="Manage" asp-action="Change" method="post">
    @foreach (SelectListItem item in Model) {
        <br />
        <input asp-for="@item.Value" type="radio" value="@item.Value" /> @(item.Value + " - " + item.Text)
   }
   <br />
   <input type="submit" value="OK" />
</form>

все переключатели отмечены в браузере -> просмотр источника

<input type="radio" value="1001" checked="checked" id="item_Value" name="item.Value" /> 1001 - Vilnius<br />
<input type="radio" value="1002" checked="checked" id="item_Value" name="item.Value" /> 1002 - Palanga<br />

Как это можно проверить все переключатели?

Добавлено:

var lst = new List<SelectListItem>() {
           new SelectListItem {
                Value = "1001",
                Text = "Vilnius",
                Selected = true
            },
            new SelectListItem {
                Value = "1002",
                Text = "Trakai",
                Selected = false
            }
        };

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Спасибо.В моем случае

<input asp-for="@item.Value" type="radio" value="@item.Value" /> @(item.Value + " - " + item.Text)

меняется на

<input asp-for="@item.Text" type="radio" value="@item.Value" /> @(item.Value + " - " + item.Text)

и в контроллере

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> ChangeKomanda(SelectListItem item) {
   // use item.Text instead of item.Value

Может ли это кому-нибудь помочь

0 голосов
/ 06 февраля 2019

Насколько я знаю, атрибут checked="checked" установлен, потому что текущее значение этих переключателей равно значению модели (свойство, которое вы назначаете в атрибуте asp-for внутри помощника по тегам).Следовательно, ваша текущая установка с asp-for="@item.Value" здесь неверна:

<input asp-for="@item.Value" type="radio" value="@item.Value" />

Если вы хотите установить их значения на основе свойства Selected внутри SelectListItem экземпляра, вам нужно использовать свойство из вашей модели представленияКласс в атрибут asp-for (свойство должно быть определено как тип значения или строка).

Ниже приведен пример правильной настройки:

Модель

// Viewmodel class
public class ViewModel
{
    // used to store selected value in select tag helper
    public string SelectedValue { get; set; }

    public List<SelectListItem> OptionList { get; set; }
}

Действие контроллера

// Populate select list
[HttpGet]
public IActionResult Change()
{
    var model = new ViewModel();
    model.OptionList = new List<SelectListItem>();

    // populate list values here
    model.OptionList.Add(new SelectListItem { Text = "1001", Value = "Vilnius", Selected = true });
    model.OptionList.Add(new SelectListItem { Text = "1002", Value = "Trakai", Selected = false });

    return View(model);
}

Вид

@* Set viewmodel property into tag helper *@
@model ViewModel

<form asp-controller="Manage" asp-action="Change" method="post">
    @foreach (var item in Model.OptionList) 
    {
        <br />
        <input asp-for="SelectedValue" type="radio" value="@item.Value" /> @(item.Value + " - " + item.Text)
    }
    <br />
    <input type="submit" value="OK" />
</form>

Связанные с этим проблемы:

Помощник по меткам радиокнопок устанавливает для каждого переключателя установленный флажок

...