2012-02-23 64 views
1

我有一個視圖模型只是從視圖MVC3複選框傳值回模型

public class Visits 
{ 
    public List<Visit> visits { get; set; } 
} 

在我的訪問模式,我有一個

public bool ValidVisit { get; set; } 

我能一切傳遞給我的看法確定並渲染視圖上的所有訪問。視圖看起來像

@model TheWallSite.ObjectModels.Visits 

@{ 
    ViewBag.Title = "Potential invalid visits!"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
@using (Html.BeginForm()) 
{ 
     <fieldset> 
     <table> 
      <tr><th>Check In/Out Time</th><th>Visit Type</th><th>In/Out</th><th>IP</th><th>SSO ID</th><th>Valid Visit</th></tr> 

      @foreach (var item in Model.visits) 
      { 
       <tr> 
        <td>@Html.DisplayFor(model => item.InOutTime)</td> 
        <td>@Html.DisplayFor(model => item.VisitType)</td> 
        <td>@Html.DisplayFor(model => item.VisitName)</td> 
        <td>@Html.DisplayFor(model => item.IP)</td> 
        <td>@Html.DisplayFor(model => item.SSO)</td> 
        <td>@Html.EditorFor(model => item.ValidVisit)</td> 
       </tr> 
      } 
     </table> 
     <input type="submit" value="Submit" /> 
     </fieldset> 
} 

我遇到的問題是我想最終用戶能夠選中/取消ValidVisit,然後通過這些回控制器,讓我的數據庫中正確的改變。我我有一段時間搞清楚如何做到這一點。有什麼建議麼?我的[HttpPost]控制器簽名是

public ActionResult ListQuestionableVisits(Visits model, FormCollection forms) 

但似乎沒有回到控制器。

+0

你確定你的'ListQuestionableVisits'被調用嗎?因爲您應該將其設置爲您的'Html.BeginForm()' – Marc 2012-02-23 03:48:57

+0

中的目標動作。我已經通過放入一個斷點來測試它,並在控制器中調用正確的方法。 – samack 2012-02-23 03:55:39

+0

@Marc - 默認情況下'@ Html.BeginForm()'回到相同的動作,所以在這種情況下你不需要任何參數。 – RPM1984 2012-02-23 08:41:32

回答

2

這將是模型綁定不踢,可能是由於循環。

我知道我知道,它應該工作,但它是正確的方式,它有更好的工作機會。

嘗試使用編輯器模板。

/EditorTemplates/Visit.cshtml

@model TheWallSite.ObjectModels.Visit 
<tr><td>@Html.DisplayFor(model => model.InOutTime)</td></tr> 
<tr><td>@Html.DisplayFor(model => model.VisitType)</td></tr> 
<tr><td>@Html.DisplayFor(model => model.VisitName)</td></tr> 
<tr><td>@Html.DisplayFor(model => model.IP)</td></tr> 
<tr><td>@Html.DisplayFor(model => model.SSO)</td></tr> 
<tr><td>@Html.EditorFor(model => model.ValidVisit)</td></tr> 

主視圖:

@model TheWallSite.ObjectModels.Visits 

@{ 
    ViewBag.Title = "Potential invalid visits!"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
@using (Html.BeginForm()) 
{ 
     <fieldset> 
     <table> 
      <tr> 
       <th>Check In/Out Time</th> 
       <th>Visit Type</th> 
       <th>In/Out</th> 
       <th>IP</th> 
       <th>SSO ID</th> 
       <th>Valid Visit</th> 
      </tr>     
      @Html.EditorFor(model => model.Visits) 
     </table> 
     <input type="submit" value="Submit" /> 
     </fieldset> 
} 

此外,如果這是你的完整視圖,您不需要FormCollection參數的動作,除非有一個隱藏的領域/其他魔術領域,我沒有看到。

+1

我喝了kool-aid,它工作!謝謝 – samack 2012-02-23 08:14:02

+0

@samack - 嘿,真好。讓這是一個教訓,循環是邪惡的。 :)他們根本不需要在MVC的意見。 – RPM1984 2012-02-23 08:42:33