我正在尋找一種方法來使用單選按鈕標籤助手上的value屬性來通知按鈕是否被選中,而不是使用單獨的字段進行選擇。我找到了@Shyju給related question的答案。我正在使用該答案的修改示例來展示我的意思。是否可以將html中的單選按鈕標籤助手值屬性設置爲「checked」?
比方說,我有一個視圖模型
public class ExampleViewModel
{
public int Id { get; set; }
public string UserName { get; set; }
public List<UserRole> Roles { get; set; }
}
public class UserRole
{
public int Id { get; set; }
public string RoleName { get; set; }
public bool IsSelected { get; set; }
}
是在控制器
public IActionResult Example()
{
var vm = new ExampleViewModel
{
Roles = new List<UserRole>
{
new UserRole {Id = 1, RoleName = "Admin"},
new UserRole {Id = 2, RoleName = "Editor"},
new UserRole {Id = 3, RoleName = "Reader"}
}
};
return View("Example",vm);
}
初始化,並在視圖中使用
<form asp-controller="Example" asp-action="Save">
<label class="label">User name</label>
<div class="col-md-10">
<input asp-for="UserName" type="text" />
</div>
<label class="label">Select a Role</label>
<div class="col-md-10">
<div class="btn-group" data-toggle="buttons">
@for (var i = 0; i < Model.Roles.Count; i++)
{
<label class="btn btn-default">
<input asp-for="Roles[i].Id" type="radio" value="@Model.Roles[i].Id" />
<input asp-for="Roles[i].IsSelected" type="radio" value=true />
@Model.Roles[i].RoleName
</label>
}
</div>
</div>
<input type="submit" />
</form>
我想實現這一點,是能夠讀取控制器的post方法中的UserRole.IsSelected字段,以查看特定的UserRole是否是檢查與否。如果用戶僅檢查一個按鈕並且不改變選擇,則該解決方案起作用。如果用戶將選擇更改爲另一個,則用戶觸摸的所有UserRole值都將使IsSelected字段爲true。
是否可以通過HTML以某種方式設置IsSelected值,以僅顯示在表單被提交時檢查的按鈕,還是需要JavaScript函數?
感謝斯蒂芬獲得所選的角色,你的答案是非常明確和翔實。我試圖開發一個解決方案,我可以在視圖中動態設置選擇標準。有時候,選擇是唯一的(單選按鈕),有時會允許多選(複選框)。我可以在這兩種情況下使用相同的模型。我有一種感覺可能是不可能的,但我想我會在這裏問這個問題。 – Yuhis
根本不是。這是我的問題的一個很好的答案,可能有點太精確。它隱含地解決了我的問題。 – Yuhis
@StephenMuecke在我的情況下,我在' type =「radio」value =「role.Id」/>'裏放置了一個額外的屬性'name = RoleType',並且始終獲得無線電按鈕爲空,但在閱讀您的文章後,我意識到如果使用標籤幫助器,我不需要使用name屬性,因爲'asp-for'自動爲我們生成名稱和id屬性。讀完後,我刪除了name屬性現在它正在工作,感謝您提供所有必要的代碼和簡短的解釋。 – nam