2014-05-21 123 views
2

我曾經從互聯網上的某個地方(我不記得它在哪裏)舉個例子,並將它放到我的應用程序中。代碼的作品,但不完全是我想要它,我似乎無法弄清楚如何完成它。mvc4複選框更新數據庫

下面的代碼將檢查所有複選框並更新數據庫應該在的位置。大!但是,如果取消選中複選框,則無法將數據庫中的字段從開啓改爲關閉。

我懷疑我將不得不做一個完整的代碼重寫,但這裏是我目前所擁有的。

查看:

@foreach (var item in Model) 
     { 
      <tr> 
       @Html.HiddenFor(modelItem => item.id) 

       <td class="selectAll"> 
        <input type="checkbox" name="complete" value="@item.id"/> 

       </td> 
      </tr> 
     } 

控制器:

[HttpPost] 
    public ActionResult Complete(FormCollection c) 
    { 

     int i = 0; 
     if (ModelState.IsValid) 
     { 

      var DelIDArray = c.GetValues("item.id"); 
      var DelCompleteArray = c["complete"]; 

      for (i = 0; i < DelIDArray.Count(); i++) 
      { 
       string find = DelIDArray[i].ToString(); 
       deliverylist dels = db.deliverylists.Find(Convert.ToInt32(DelIDArray[i])); 
       dels.is_complete = Convert.ToInt32(DelCompleteArray[i]); 
           } 
      db.SaveChanges(); 
     } 
     return RedirectToAction("Complete"); 

    } 

回答

0

當您提交表單控制器代碼僅被解僱。

當您單擊其中一個複選框時,您可以使用異步方法(jquery)來調用更新代碼,但如果您只需要更新一個複選框,就可以對其進行評估。

正如您所料,如果您希望它能夠異步工作,還有更多工作要做。下面是使用mvc4有點底漆/的WebAPI/jQuery的一起:

http://www.codeproject.com/Articles/344078/ASP-NET-WebAPI-Getting-Started-with-MVC-and-WebAP

0

下面的代碼被打動了我,我可以一直不過工作,我知道這不可能是正確的,我正在尋找合適的解。

我輸入n增加2的原因是因爲「完整」複選框數組收集了所有虛假的複選框,並添加了真正的複選框,並且也拋出了對齊。 (如果是有道理的)

這是我在更新與複選框數據庫第一次嘗試

查看:

@foreach (var item in Model) 
    { 
     <tr> 
      @Html.HiddenFor(modelItem => item.id) 

      <td class="selectAll"> 
       @if (item.is_complete == 1) 
       { 
        @Html.CheckBox("complete", true, new { id = item.id, @value = item.id }) 

        } 
        else 
        { 
        @Html.CheckBox("complete", new { id = item.id, @value = item.id }) 

        } 
      </td> 
     </tr> 
    } 

控制器:

[HttpPost] 
public ActionResult Complete(FormCollection c) 
{ 

    int i = 0; 
    if (ModelState.IsValid) 
    { 

     var DelIDArray = c.GetValues("item.id"); 
     var DelCompleteArray = c["complete"]; 

     var n = 0; 
     for (i = 0; i < DelIDArray.Count(); i++) 
     { 
      string find = DelIDArray[i].ToString(); 
      deliverylist dels = db.deliverylists.Find(Convert.ToInt32(DelIDArray[i])); 
       if (c.GetValues("complete")[n] == "false") 
       { 
        dels.is_complete = 0; 
        n = n + 1; 
       } 
       else 
       { 
        dels.is_complete = 1; 
        n = n + 2; 
       } 
       db.Entry(dels).State = EntityState.Modified; 
     } 
     db.SaveChanges(); 
    } 
    return RedirectToAction("Complete"); 

}