0

我想有registration form註冊表單的管理員端。MVC4:DropDownList的作品,但不是DropDownListFor

現在我的DropDownList工作,但我不知道如何獲得的價值,並將其寫入數據庫(Sql服務器精簡版)。然後再次,我想可能會使用DropDownList會更好的主意,可以工作,但我得到錯誤。這裏是我的模型

public class UserModel 
    { 
     public int UserId { get; set; } 

     [Required] 
     [EmailAddress] 
     [StringLength(100)] 
     [DataType(DataType.EmailAddress)] 
     [Display(Name = "Email ID ")] 
     public string Email { get; set; } 

     [Required] 
     [DataType(DataType.Password)] 
     [StringLength(20, MinimumLength = 6)] 
     [Display(Name = "Password ")] 
     public string Password { get; set; } 

     [Required] 
     [Display(Name = "First Name ")] 
     public string FirstName { get; set; } 

     [Required] 
     [Display(Name = "Last Name ")] 
     public string LastName { get; set; } 

     [Required] 
     [Display(Name = "Address ")] 
     public string Address { get; set; } 

     public List<string> PossibleRights; 

     [Required] 
     [Display(Name = "Access Rights")] 
     public string AccessRight { get; set; } 

    } 

我需要從dropdownlist獲得的價值,並將其設置爲Accessright

我控制器

public List<SelectListItem> UserAccessRight() 
     { 
      var rights = new List<SelectListItem> 
       { 
        new SelectListItem {Text = "Full", Value = "0"}, 
        new SelectListItem {Text = "Partial", Value = "1"} 
       }; 
      return rights; 
     } 

     [HttpGet] 
     public ActionResult Register() 
     { 
      var rights = UserAccessRight(); 
      ViewBag.right = rights; 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Register(Models.UserModel user) 
     { 

      if (ModelState.IsValid) 
      { 
       using (var db = new DBaseEntities()) 
       { 
        var crypto = new SimpleCrypto.PBKDF2(); 

        var encrpPass = crypto.Compute(user.Password); 

        var sysUser = db.SystemUsers.Create(); 

        sysUser.FirstName = user.FirstName; 
        sysUser.LastName = user.LastName; 
        sysUser.Address = user.Address; 
        sysUser.Email = user.Email; 
        sysUser.Password = encrpPass; 
        sysUser.PasswordSalt = crypto.Salt; 

        sysUser.AccessRight = user.AccessRight; 


        db.SystemUsers.Add(sysUser); 
        db.SaveChanges(); 

        return RedirectToAction("Index", "Home"); 

       } 
      } 
      else 
      { 
       ModelState.AddModelError("","Login data is incorrect."); 
      } 
      return View(); 
     } 

     private bool IsValid(string email, string password) 
     { 
      var crypto = new SimpleCrypto.PBKDF2(); 

      bool isValid = false; 
      using (var db = new DBaseEntities()) 
      { 
       var user = db.SystemUsers.FirstOrDefault(u => u.Email == email); 

       if (user!= null) 
       { 
        if (user.Password == crypto.Compute(password, user.PasswordSalt)) 
        { 
         isValid = true; 
        } 
       } 

      } 

      return isValid; 
     } 

我看來

<h4>Signup Now!</h4> 


      <div class="editor-label">@Html.LabelFor(u=> u.FirstName)</div> 
      <div class="editor-field"> @Html.TextBoxFor(u=> u.FirstName)</div> 
      <br/> 
      <div class="editor-label">@Html.LabelFor(u=> u.LastName)</div> 
      <div class="editor-field"> @Html.TextBoxFor(u=> u.LastName)</div> 
      <br/> 
      <div class="editor-label">@Html.LabelFor(u=> u.Address)</div> 
      <div class="editor-field"> @Html.TextBoxFor(u=> u.Address)</div> 
      <br/> 
      <div class="editor-label">@Html.LabelFor(u=> u.Email)</div> 
      <div class="editor-field"> @Html.TextBoxFor(u=> u.Email)</div> 
      <br/> 
      <div class="editor-label">@Html.LabelFor(u=> u.Password)</div> 
      <div class="editor-field"> @Html.PasswordFor(u=> u.Password)</div> 
      <br/> 
      <div class="editor-label">@Html.LabelFor(u=> u.AccessRight)</div> 
      <div class="editor-field"> @Html.DropDownList("right")</div> 

      <br/> 
      <input type="submit" value="Register"/> 

當我嘗試將@Html.DropDownList("right")更改爲 @Html.DropDownListFor((u=>u.AccessRight, new SelectList("right", "value", "text"),"--Select Right--")我收到錯誤。編輯:錯誤說:「HttpException是未處理由用戶代碼 數據綁定:‘System.Char’不包含名爲‘值’

在此先感謝財產

+0

什麼是錯誤? – RL89

+0

我在最後添加了它作爲編輯。 – Cybercop

回答

1

試試這個

@Html.DropDownListFor(model => model.AccessRight, new SelectList(ViewBag.right , "id", "Text ")) 

在模型中,訪問權限應包含存在於Viewbag.right一個有效的ID可枚舉類型。

訪問權限應包含你想顯示爲s的值在下拉列表中選出

編輯: -

@Html.DropDownListFor(model => model.AccessRight, new SelectList(ViewBag.right , "value", "Text ")) 

的Datavalue場的名稱應該是相同的列表

希望這有助於

+0

仍然是相同的錯誤,現在而不是價值它說不包含名稱爲「id」 – Cybercop

+0

的屬性請檢查編輯部分now – RL89

+0

所以我模型中的AccessRight不應該是字符串,應該是可枚舉類型?沒有在模型中使用AccessRight獲得該部分。你能解釋更多嗎? – Cybercop

0

嘗試更改下面的代碼

from

<div class="editor-field"> @Html.DropDownList("right")</div> 

<div class="editor-field"> @Html.DropDownList("AccessRight","Provide list of items here")</div> 

在提交時,您將自動獲得在模型價值AccessRight。

相關問題