2017-11-24 16 views
0

私はすべてのロールと実際にはchosedユーザーのロールを取得できますが、次にEditUserアクションにポストするとDropdownlistはnullを送ります。 私はフォームが私のコントローラに投稿されるとき、DropDownListからnullを取得します。ここで ASP.NET MVCでコントローラにポストした後にDropdownlistの値がnullになる

は、ここに私のモデル

public class EditUserViewModel 
    { 
     public string Id { get; set; } 
     public string Name { get; set; } 
     public string Email { get; set; } 
     public List<SelectListItem> ApplicationRoles { get; set; } 
     public string ApplicationRoleId { get; set; } 
    } 

あるアクション

[HttpGet] 
      public async Task<ActionResult> EditUser(string id) 
      { 
       EditUserViewModel model = new EditUserViewModel(); 
       model.ApplicationRoles = RoleManager.Roles.Select(r => new SelectListItem 
       { 
        Text = r.Name, 
        Value = r.Id 
       }).ToList(); 


       if (!String.IsNullOrEmpty(id)) 
       { 
        ApplicationUser user = await UserManager.FindByIdAsync(id); 
        if (user != null) 
        { 
         var role = await UserManager.GetRolesAsync(user.Id); 
         var existingRole = role.First(); 
         string existingRoleId = RoleManager.Roles.Single(r => r.Name == existingRole).Id; 
         model.Id = user.Id; 
         model.FirstName = user.FirstName; 
         model.ApplicationRoleId = existingRoleId; 
         ViewBag.RoleId = new SelectList(RoleManager.Roles, "Id", "Name", model.ApplicationRoleId); 
        } 
       } 
       return PartialView("_EditUser", model); 
      } 

されており、ここでの唯一のDropDownListから、ではない@htmlからヌル取得_EditUser.cshtml

から
<div class="form-group"> 
       @Html.Label("Role typ", htmlAttributes: new { @class = "control-label col-md-6" }) 
       <div class="col-md-12" title="Ange antal datorer som finns i lager"> 
        @Html.DropDownList("RoleId", null, new { @class = "form-control" }) 
        @Html.ValidationMessageFor(model => model.ApplicationRoles, "", new { @class = "text-danger" }) 
       </div> 
      </div> 

のDropDownListです.EditorFor /ありがとうございます!

+0

あなたはモデルを表示し、POSTメソッド(の署名は、あなたのモデルが実際にという名前のプロパティが含まれていない(と、とにかくビューモデルを持っている場合は、ViewBagを必要とすることはありません)ApplicationRolesプロパティ にSelectListのを割り当てました'RoleId'? - あなたのgetメソッドのコードに基づいて、あなたのビューコードは' @Html.DropDownListFor(m => m.ApplicationRoleId、Model.ApplicationRoles) ' –

+0

@StephenMueckeありがとうございます。 –

+0

を受け入れることを知っています、 それ@StephenMueckeが応答したのは です –

答えて

1

フォームは、成功したフォームコントロールの名前と値のペアをポストバックします。生成する<select>要素にname="RoleId"が含まれていますが、モデルにはRoleIdという名前のプロパティは含まれていません。あなたはApplicationRoleId役割プロパティに選択したオプションをバインドしたいので、あなたは

@Html.LabelFor(m => m.ApplicationRoleId) 
@Html.DropDownListFor(m => m.ApplicationRoleId, Model.ApplicationRoles) 
@Html.ValidationMessageFor(m => m.ApplicationRoleId) 

注意をする必要がありますを表示:

  1. あなたの現在の@Html.Label(..)コードは(あなたのドロップダウンリストに関連付けられたラベル を作成しません。
  2. )それをクリック フォーカスを設定しませんValidationMessageFor()は、プロパティへのご 結合SelectList
  3. ではない、に適用する必要があります
  4. ViewBag.RoleId = new SelectList(..)コードを削除します。あなたの はすでに
0

HttpGetメソッドのみがコントローラのそのメソッドで許可されていると宣言しているためです。その理由

+0

は君たちあなたのすべてに感謝); tは、今、私はViewModelにして編集した.. –

関連する問題