【问题标题】:How to show checked radio button in Razor edit view Asp net core mvc如何在 Razor 编辑视图中显示选中的单选按钮 Asp net core mvc
【发布时间】:2019-06-30 02:11:17
【问题描述】:

尽管在 Razor 视图中有 Asp net core 代码:

@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
            }
        };

【问题讨论】:

  • 您能提供什么样的List&lt;SelectListItem&gt; 传递给查看?我认为将List&lt;SelectListItem&gt; 用于@model 指令并不是一个好主意。

标签: c# razor asp.net-core radio-button asp.net-core-mvc


【解决方案1】:

据我所知,设置了checked="checked" 属性是因为这些单选按钮的当前值等于模型值(您在标签助手内的asp-for 属性中分配的属性)。因此,您当前使用 asp-for="@item.Value" 的设置在这里是错误的:

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

如果您想根据SelectListItem 实例中的Selected 属性设置它们的值,您需要将视图模型类中的属性用于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>

相关问题:

Radio Button Tag Helper sets every radio button to checked

【讨论】:

  • 所有单选按钮都已选中!
【解决方案2】:

谢谢。就我而言

<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

希望对某人有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2017-02-07
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多