2011-06-17 47 views
1

如何从剃须刀视图引擎中动态创建的复选框列表中查找复选框的值(即,是否已选中)?代码运行如下...要从剃须刀视图引擎中动态创建的复选框列表中获取复选框的值

@foreach (var item in Model)) 
{ 
     <tr> 
      <td class="Viewtd"> 
       @Html.ActionLink(item.Title, "Edit", new { id = item.id}) 
      </td> 
      <td> 
    @Html.CheckBox("ChkBox"+item.ThresholdID , false, new { id = item.id})       
      </td> 
     </tr> 
} 

如何获取控制器中的这些复选框值?

回答

1

正确的做法:使用视图模型和编辑器模板。

由于总是通过定义视图模型开始:

public class MyViewModel 
{ 
    public string Title { get; set; } 
    public string Id { get; set; } 
    public bool IsThreshold { get; set; } 
} 

然后控制器,用于填充此视图模型:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new[] 
     { 
      new MyViewModel 
      { 
       Id = "1", 
       Title = "title 1", 
       IsThreshold = false, 
      }, 
      new MyViewModel 
      { 
       Id = "2", 
       Title = "title 2", 
       IsThreshold = true, 
      }, 
      new MyViewModel 
      { 
       Id = "3", 
       Title = "title 3", 
       IsThreshold = false, 
      }, 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Edit(MyViewModel model) 
    { 
     // This action will be responsible for editing a single row 
     // it will be passed the id of the model and the value of the checkbox 
     // So here you can process them and return some view 
     return Content("thanks for updating", "text/plain"); 
    } 
} 

然后Index视图(~/Views/Home/Index.cshtml):

@model IEnumerable<MyViewModel> 

<table> 
    <thead> 
     <tr> 
      <th></th> 
      <th>Threshold</th> 
     </tr> 
    </thead> 
    <tbody> 
     @Html.EditorForModel() 
    </tbody> 
</table> 

最后编辑模板(~/Views/Home/EditorTemplates/MyViewModel.cshtml):

@model MyViewModel 
@{ 
    ViewData.TemplateInfo.HtmlFieldPrefix = ""; 
} 
<tr> 
    @using (Html.BeginForm("Edit", "Home")) 
    { 
     @Html.HiddenFor(x => x.Id) 
     @Html.HiddenFor(x => x.Title) 
     <td><input type="submit" value="@Model.Title" /></td> 
     <td>@Html.CheckBoxFor(x => x.IsThreshold)</td> 
    } 
</tr>