我有一个包含list nad过滤器选项的视图。我需要添加选项以立即更新列表中的所选项目。具有列表和过滤器选项的视图如下所示:
@model GWeb.Models.FilterModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Search criteria</legend>
@Html.LabelFor(model => model.ProjectId, "Project")
@Html.DropDownList("ProjectId",
new SelectList(ViewBag.projectListDesciption as System.Collections.IEnumerable, "Id", "Desciption"), "all")
@Html.LabelFor(model => model.StartWork, "From Date")
@(Html.Telerik().DatePicker()
.Name("StartWork")
.Value(Model.StartWork))
<input type="submit" value="Filter" name="submitButton"/>
</fieldset>
<fieldset>
<legend>Status change</legend>
Change status on selected:
@Html.DropDownList("Status",
new SelectList(ViewBag.statusList as System.Collections.IEnumerable, "Id", "Description"))
<input type="submit" value="Update" name="submitButton"/>
</fieldset>
}
@{Html.RenderPartial("WorkList", Model.workList);}
在部分视图中呈现列表的位置,简而言之:
@model IEnumerable<GWeb.Models.WorkModel>
@foreach (var item in Model)
{
<tr>
<td>
@Html.CheckBox("chb" + item.Id, item.Selected)
</td>
...
</tr>
}
以下是使用的模型:
public class FilterModel
{
public int ProjectId { get; set; }
public DateTime? StartWork { get; set; }
public int? Status { get; set; }
public List<WorkModel> workList { get; set; }
}
public class WorkModel
{
public int Id { get; set; }
...
public bool Selected { get; set; }
}
在控制器中,我正在检查点击的按钮。如果是'更新',我想进行修改。但workFilter.workList
始终为空。
public ActionResult WorkManager(FilterModel workFilter, string submitButton)
{
if (submitButton == "Update")
{
if (workFilter.workList != null)
{
//...
}
}
else
{
//filter
}
//...
return View(workFilter);
如何选中控制器wchich复选框以进行更新?
非常感谢任何帮助!
答案 0 :(得分:1)
你应该看How to produce non-sequential prefix collection indices with MVC HTML Editor templates?,因为对于任何更复杂的事情,你都需要做那样的事情。
快速解决您的问题的方法是:
//instead of: @{Html.RenderPartial("WorkList", Model.workList);} write code below inside using statement(below </fieldset>)
@for (int i = 0; i < Model.worklist.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(x => x.workList[i].Id)
@Html.CheckBoxFor(x => x.workList[i].Selected)
</td>
...
</tr>
}
警告:以上代码未经过测试,但我建议您先查看答案。
答案 1 :(得分:0)
为避免workList为NULL问题,您可以向FilterModel默认构造函数(无参数构造函数)添加代码,以使用虚拟项创建和初始化workList。
如果能解决问题,请告诉我。
<强>更新强>
请原谅我没有说明向构造函数添加代码的效果。不,它不会创建新模型。它的作用是初始化workList,以便Controller可以访问其中的索引元素。
示例代码:
public FilterModel(){
workList = new List<WorkModel>();
for(int i = 0; i < MAX_WORKMODEL_COUNT; i++){
workList.Add(new WorkModel());
}
}