2016-06-11 30 views
0

嗨那裏)我是一個asp新手,我正在實現基於角色的安全性在我的項目中,使用ApplicationUsers類。所以我創建了頁面,其中管理員可以爲用戶設置角色,但我無法爲用戶設置另一個角色,因爲在編輯發佈方法中,ModelState.IsValid值爲false,因爲它無法將字符串id值轉換爲角色。我試着給ModelState設置值,但我不能,因爲它沒有setter。請幫助,我怎樣才能以另一種方式修復它? 我下面的代碼...Asp設置角色ModelState.IsValid是假

public ActionResult Edit(string id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     ApplicationUser applicationUser = db.Users.Find(id); 
     if (applicationUser == null) 
     { 
      return HttpNotFound(); 
     } 
     var roles = db.Roles.Select(x => new SelectListItem { Text = x.Name, Value = x.Id }).ToArray(); 
     ViewBag.Roles = roles; 
     return View(applicationUser); 
    } 

    // POST: ApplicationUsers/Edit/5 
    // Чтобы защититься от атак чрезмерной передачи данных, включите определенные свойства, для которых следует установить привязку. Дополнительные 
    // сведения см. в статье http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "Id,Email,EmailConfirmed,PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName,Roles")] ApplicationUser applicationUser) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(applicationUser).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(applicationUser); 
    } 

和看法:

<div class="form-group"> 
     @Html.LabelFor(model => model.Roles, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(x => x.Roles, (IEnumerable<SelectListItem>)ViewBag.Roles, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Roles, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
+0

從你的代碼看起來你正在發佈User類(來自Identity Framework)。我不會推薦這個。改爲使用ViewModel,不要發送關鍵字段。我不希望客戶能夠更新PasswordHash。在你的viewmodel中,你可以添加一個只有roleid的角色集合。在您的編輯方法中,您可以更新您的標識模型。 –

回答

0

嘗試設置一個突破點就在開幕{if (ModelState.IsValid)後看到真正缺什麼問題是另一個禮你還沒有設置? ApplicationUser對象中可能存在一個未設置或數據類型不正確的必需屬性。

+0

如何從Asp.Net mvc模型狀態獲取所有錯誤:http://stackoverflow.com/questions/1352948/how-to-get-all-errors-from-asp-net-mvc-modelstate –