尽管在Razor视图ASP.NET的核心代码:
@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
}
};
据我所知,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>
相关的问题:
谢谢。在我的情况
<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
它可以帮助别人