2012-02-23 55 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