2013-10-20 19 views
0

我一直在嘗試更新我的數據庫中的標誌(活動)。要做到這一點,我有一個看起來如下所示。 在視圖中,我在數據庫中有記錄,我在視圖中的表中的每一行都傳遞了BillPayID。我想要的是當用戶按下開始或停止按鈕時,活動標誌設置爲0或1.MVC4查看不通過正確的模態值

問題是,我的視圖總是發送第一個BillPayID,即使不同行上的按鈕是點擊。

有人可以幫忙嗎?

@if (Model !=null) 
     { 
      using (Html.BeginForm("StopScheduled", "Admin", FormMethod.Post, new { })) 
      { 
       <table> 
       <tr> 
        <th> 
         Account Number 
        </th> 
        <th> 
         Payee ID 
        </th> 
        <th> 
         Amount 
        </th>     
        <th> 
         Scheduled Date 
        </th> 
        <th> 
         Period 
        </th> 
        <th> 
         Active 
        </th> 
        <th> 
         Stop/Start Payment 
        </th>   

       </tr> 

       @foreach(var item in Model) 
       { 

        @Html.HiddenFor(model => item.BillPayID) 

        <tr> 
         <td> 
          @Html.DisplayFor(model => item.AccountNumber) 
          @Html.HiddenFor(model => item.AccountNumber) 
         </td> 

         <td> 
          @Html.DisplayFor(model => item.PayeeID) 
          @Html.HiddenFor(model => item.PayeeID) 
         </td> 
         <td> 
          $ @Html.DisplayFor(model => item.Amount) 
          @Html.HiddenFor(model => item.Amount) 
         </td> 
         <td> 
          @Html.DisplayFor(model => item.ScheduleDate) 
          @Html.HiddenFor(model => item.ScheduleDate) 
         </td> 
         <td> 
          @Html.DisplayFor(model => item.Period) 
          @Html.HiddenFor(model => item.Period) 
         </td> 
         <td> 
          @Html.DisplayFor(model => item.Active) 
          @Html.HiddenFor(model => item.Active) 
         </td> 

         <td> 
          @if (item.Active == 0) 
          { 
           <input type="submit" style="width:100%" value="START" /> 

          } 
          else       
          { 
           <input type="submit" style="width:100%" value="STOP" /> 
          } 

         </td> 

        </tr> 

       } 

       </table> 
      } 

     } 

這是控制器

[HttpPost] 
     public ActionResult StopScheduled([Bind(Prefix = "item")] BillPayModel model) 
     { 
      int NewActive = 1; 

      if (model.Active == 1) 
      { 
       NewActive = 0; 
      } 

      try 
      { 
       if (ModelState.IsValid) 
       { 

        BillPay EditBillPay = db.BillPays.Find(model.BillPayID); 
        EditBillPay.Active = NewActive; 
        EditBillPay.ModifyDate = DateTime.Now; 
        db.Entry(EditBillPay).State = EntityState.Modified; 
        db.SaveChanges(); 
        return View(model); 
       } 
       else 
       { 
        ModelState.AddModelError("", "Could not Stop Scheduled Payment"); 
       } 
      } 


      catch (FormatException) 
      { 
       ModelState.AddModelError("", "Could not Stop Scheduled Payment"); 
      } 


      return View(model); 
     } 

回答

0

隱藏字段仍然在HTML中的名稱和ID,所以你的情況爲BillPayID隱藏字段都將被命名爲item.BillPayID你把x個。

更改foreach循環for循環,像這樣:

@for (int i =0; i < Model.Count(); i++) 
{ 
    @Html.HiddenFor(model => Model[i].BillPayID) 

    .... rest of your code 
} 

您的視圖代碼將整個模型(IEnumerable的)發送到你的控制器,這將使確定哪一行選擇了痛苦,因爲它確實不會在您的模型中出現您的設置跟蹤所選項目的任何值。

我建議你將你的開始/停止過程移動到另一個視圖。如果您點擊表格中的某個項目,則會跳轉到第二個頁面,要求您啓動或停止。您也可以使用JavaScript函數將選定的值發送到您的控制器。