2016-08-22 139 views
-1

我在這個網站上工作,我很難設置從我的複選框到數據庫的真或假,以將我的IsActive值設置爲true或false,以便更新使用代碼的帳戶在MVC上的方法。無法轉換爲布爾

我的帳戶和身份識別模型

公共類RegisterViewModel { 公共布爾IsActive {獲得;組; }}

和我的帳戶控制器

// 
    // GET: /Account/Update 
    [HttpGet] 
    [ETAuthorizeAttribute] 
    public ActionResult Update(string email) 
    { 
     var user = _db.Users.FirstOrDefault(x => x.Email == email); 
     ViewBag.IsActive = user.IsActive; 
     ViewBag.CostCentres = new SelectList(_db.CostCentres.Select(x => x.Station).Distinct()); 
     ViewBag.Hotel = new SelectList(_db.Hotels.Where(x => x.IsBlocked == true).Distinct(), "HotelId", "HotelName"); 
     string selected = ""; 
     foreach (var item in user.Roles) 
      selected += item.RoleId + ","; 
     ViewBag.Selected = selected; 
     ViewBag.Roles = _db.Roles.ToList(); 

     RegisterViewModel model = new RegisterViewModel(); 
     model.Email = user.Email; 
     return View(model); 
    } 

    // 
    // POST: /Account/Register 
    [HttpPost] 
    [ETAuthorizeAttribute] 
    [ValidateAntiForgeryToken] 
    public ActionResult Update(RegisterViewModel model) 
    { 

     bool isActive = Convert.ToBoolean(Request.Form["active"]); 
     string role = Request.Form["role"]; 
     if (role != null) 
     { 

      ApplicationUser user = _db.Users.FirstOrDefault(x => x.Email == model.Email); 
      if (user != null) 
      { 
       user.HotelId = model.HotelId; 
       user.Station = model.Station; 
       user.FullName = model.FullName; 
       user.IsActive = isActive; 

       try { 

       _db.Entry(user).State = EntityState.Modified; 
       _db.SaveChanges(); 
       } 
      // return RedirectToAction("Index"); 

       catch(Exception e) 
       { 
       _db.ClearUserRoles(UserManager, user.Id); 
       string[] roles = role.Split(','); 
       foreach (var item in roles) 
       { 
        string name = _db.Roles.FirstOrDefault(x => x.Id == item).Name; 
        _db.AddUserToRole(UserManager, user.Id, name); 
       } 
       return RedirectToAction("Index", "Account"); 
      } 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

和我的看法上...

<div class="form-group"> 
     @Html.Label("IsActive", new { @class = "control-labelcol-md-2" }) 
       <div class="col-md-10"> 
     <div class="checkbox col-md-3"> 
@if (ViewBag.IsActive) 
{ 
<input type="checkbox" name="active" value="@ViewBag.IsActive" checked/>} 
    else 
      { 
<input type="checkbox" name="active" value="@ViewBag.IsActive" /> } 
          </div> 

        </div> 
       </div> 
+1

你可以請張貼你的代碼..你已經嘗試過! –

+0

分享你到目前爲止所做的一切。也請看[在ASP.NET MVC 4中獲取複選框值](http://stackoverflow.com/questions/14730746/getting-checkbox-value-in-asp-net-mvc-4)和[mvc3複選框值在提交後](http://stackoverflow.com/questions/17868236/mvc3-checkbox-value-after-submit) –

+0

只是做了以上 – ILoveCode

回答

2

基本上,你必須有你的HTML你的名字控制一樣,在你的變量控制器示例:

public ActionResult Index(bool checkboxControl) 
{ 
    return View(); 
} 

並且在您的HTML端代碼必須是

<input type="checkbox" name="checkboxControl" /> 

,如果您使用的是代碼第一種方法或不要緊DB第一,這是根本出路MVC工作

+0

我想我已經這樣做了,但我一直遇到錯誤,說「驗證錯誤」 – ILoveCode

+0

嘗試運行您的代碼獲取html控制器,並查看該控制器名稱是什麼...如果名稱是正確的,並且您的控制器參數是相同的名稱...問題不在於從html到控制器的值的實際傳遞....還要檢查如果您在控制器方法中使參數爲空,那麼您是否會收到「驗證錯誤」,只需使其成爲bool在它後面有一個問號例如:bool? – BroCode

+0

錯誤提示「字符串實體不是有效的布爾值」 – ILoveCode

0

你是不是通過複選框的價值模型

<div class="form-group"> 
    @Html.Label("IsActive", new { @class = "control-labelcol-md-2" }) 
    <div class="col-md-10"> 
     <div class="checkbox col-md-3"> 
      @if (ViewBag.IsActive) 
        { 
        <input type="checkbox" name="active" value="@ViewBag.IsActive" checked/> 
        } else 
         { 
          <input type="checkbox" name="active"  value="@ViewBag.IsActive" /> } 
     </div> 

     </div> 
</div> 

改變這

<div class="form-group"> 
      @Html.Label("IsActive", new { @class = "control-labelcol-md-2}) 
       <div class="col-md-10"> 
        <div class="checkbox col-md-3"> 
        @Html.CheckBoxFor(m => m.IsActive, new { id = "YourId"}) 
        </div> 
       </div> 
    </div> 

您需要以檢查它會根據你是從價值傳遞工作服務器端..

希望它會爲你工作..

+0

好的如何在我的控制器? – ILoveCode

+0

bool active = Convert.ToBoolean(Request.Form [「myID」]); ...這是正確的轉換 – ILoveCode

+0

你說你模型就像 'public class RegisterViewModel {public bool IsActive {get;組; }}' 所以如果你在數據庫中的這個字段是字符串,那麼你只需檢查**如果**條件是Isactive是真發送一些字符串數據庫... 這可以很容易地在服務器端完成,但如果你的數據庫具有位類型數據類型,則不需要任何轉換。 –