30

ASP.NET 5 MVC 6 のラジオ ボタンのタグ ヘルパーが表示されません。ラジオ ボタンを使用する必要があるフォーム要素を処理する正しい方法は何ですか?

4

3 に答える 3

43

ラジオ ボタン タイプも含むすべての入力タイプ用の TagHelper があります。このようなビューモデルがあると仮定します

public class CreateUserVm
{
    public string UserName { set; get; }
    public IEnumerable<RoleVm> Roles { set; get; } 
    public int SelectedRole { set; get; }
}
public class RoleVm
{
    public int Id { set; get; }
    public string RoleName { set; get; }        
}

そしてあなたのGETアクションでは、

public IActionResult Index()
{
    var vm = new CreateUserVm
    {
        Roles = new List<RoleVm>
        {
            new RoleVm {Id = 1, RoleName = "Admin"},
            new RoleVm {Id = 2, RoleName = "Editor"},
            new RoleVm {Id = 3, RoleName = "Reader"}
        }
    };
    return View(vm);
}

ビューでは、入力タグにマークアップを使用するだけです。

@model YourNamespaceHere.CreateUserVm
<form asp-action="Index" asp-controller="Home">
    <label class="label">User name</label>
    <div class="col-md-10">
        <input type="text" asp-for="UserName" />
    </div>
    <label class="label">Select a Role</label>
    <div class="col-md-10">
    @foreach (var item in Model.Roles)
    {
       <input asp-for="SelectedRole" type="radio" value="@item.Id" /> @item.RoleName
    }
    </div>
    <input type="submit" />
</form>

フォームを投稿すると、選択したロールのロール ID がSelectedRoleプロパティに表示されます

上記の剃刀コードは、ループによって生成された各入力に対して同じ Id属性値と属性値を持つ入力要素を生成することに注意してください。 上記の例では、 and属性値が に設定されnameた 3 つの入力要素 (ラジオ ボタン タイプ) が生成されます。属性値がビュー モデルのプロパティ名 ( ) と一致するため、モデル バインディングは機能しますが、ID 属性値が重複していると、クライアント側のコードで問題が発生する可能性があります (ドキュメント内の ID の重複は無効です)。IdnameSelectedRolenameSelectedRole

于 2016-01-02T22:35:13.237 に答える