2011-04-04 56 views
1

我正在尝试显示动态复选框的列表并允许用户选择一个或多个。一旦返回到控制器,我将需要采取所有检查的ID,并写入每个数据库的记录。在MVC2中发布checKbox值

以下是与此相关的代码片段。

DTO

public class OfficeVisitPartOfBodyDisplay 
{ 
    public int PartOfBodyId { get; set; } 
    public string PartOfBodyName { get; set; } 
    public bool PartOfBodyChecked { get; set; } 
} 

型号

public class OfficeVisitModel 
{ 
    public OfficeVisitEntity OfficeVisit { get; set; } 
    public TList<PartOfBodyEntity> PartOfBodies { get; set; } 
    public TList<OfficeVisitPartOfBodyEntity> OfficeVisitPartOfBodies { get; set; } 
    public List<OfficeVisitPartOfBodyDisplay> OfficeVisitPartOfBodyDisplays { get; set; } 
    public string PatientName { get; set; } 
} 

视图(有问题的部分)

<div data-role="fieldcontain"> 
    <fieldset data-role="controlgroup"> 
    <legend>Pain Area(s):</legend> 
     <% foreach (OfficeVisitPartOfBodyDisplay officeVisitPartOfBodyDisplay in Model.OfficeVisitPartOfBodyDisplays) 
       { %> 
        <label for="partofbodydisplay<%= officeVisitPartOfBodyDisplay.PartOfBodyId %>"><%= officeVisitPartOfBodyDisplay.PartOfBodyName%></label> 
        <input type="checkbox" id="partofbodydisplay<%= officeVisitPartOfBodyDisplay.PartOfBodyId%>" name="partofbodydisplay" value="<%= officeVisitPartOfBodyDisplay.PartOfBodyName%>" /> 
     <% } %>     
    </fieldset> 
</div> 

控制器,在模型中OfficeVisitPartOfBodyDisplays和partofbodydisplay始终没有数据回来。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult ActivePainArea(OfficeVisitModel model, OfficeVisitPartOfBodyDisplay[] partofbodydisplay, string submitButton) 
{ 
    switch (submitButton) 
    { 
     case "Save": 
      model.Message = "Save Coming Soon"; 
      return View(model); 
     case "Cancel": 
      model.Message = "Cancel Coming Soon"; 
      return View(model); 
     case "Complaint": 
      return RedirectToAction("ActiveComplaint", new { patientId = model.OfficeVisit.PatientId, readOnly = false }); 
     case "Patient History": 
      model.Message = "Patient History Coming Soon"; 
      return View(model); 
      //return RedirectToAction("ActivePatientHistory", new { patientId = model.OfficeVisit.PatientId }); 
     default: 
      return View(model); 
    } 
} 

回答

1

试试这个:

控制器:

public ActionResult ActivePainArea(OfficeVisitModel officeVisitPartOfBodyDisplay, string submitButton) { 

查看:

<div data-role="fieldcontain"> 
    <% using (Html.BeginForm()) { %> 
    <fieldset data-role="controlgroup"> 
     <legend>Pain Area(s):</legend> 
     <% var i = 0; %> 
     <% foreach (var officeVisitPartOfBodyDisplay in Model.OfficeVisitPartOfBodyDisplays) { %> 
     <label for="partofbodydisplay<%= officeVisitPartOfBodyDisplay.PartOfBodyId %>"> 
     <%= officeVisitPartOfBodyDisplay.PartOfBodyName%></label> 
     <%: Html.CheckBox("OfficeVisitPartOfBodyDisplays[" + i.ToString() + "].PartOfBodyChecked", officeVisitPartOfBodyDisplay.PartOfBodyChecked)%> 
     <% i++; %> 
     <% } %> 
     <input type="submit" value="save" /> 
    </fieldset> 
    <% } %> 
    </div> 

你也可能要引用此页面了解更多信息: Phil Haacked Model Binding To A List