2016-01-02 28 views

答えて

25

ラジオボタンの種類を含むすべての入力タイプにタグヘルパーがあります。ビューで、ビューモデルこの

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> 

あなたが選択した役割のために、フォーム、Rold同上を投稿するとSelectedRole財産になります

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

+0

I 'ラジオボタンのJSクリックイベントを使用してフォームに送信しますが、ラジオからの値は決してアクションメソッドに渡されません。ラジオ入力の名前またはid属性を特定のものに設定する必要がありますか? –

+0

名前属性を設定するとトリックになりました –

+0

質問:値をtrueまたはfalseに設定できますか? 'value =" true "'? –

関連する問題