我在将mvc4应用程序中的复选框状态保留下来时遇到了问题。我正在尝试将其值发送到我的控制器逻辑,并在我使用新值将模型发送回视图之前,根据给定值刷新模型中的列表。鉴于我的复选框是“列表中显示已禁用的元素”类型功能,我需要它才能打开和关闭。我已经看到了很多不同的解决方案,但我似乎无法让它们起作用:(
以下是我观点的一部分:
@model MyProject.Models.HomeViewModel
<div class="row-fluid">
<div class="span12">
<div class="k-block">
<form action="~/Home/Index" name="refreshForm" method="POST">
<p>Include disabled units: @Html.CheckBoxFor(m => m.Refresh)</p>
<input type="submit" class="k-button" value="Refresh" />
@* KendoUI Grid code *@
</div>
</div>
HomeViewModel:
public class HomeViewModel
{
public List<UnitService.UnitType> UnitTypes { get; set; }
public bool Refresh { get; set; }
}
HomeViewController需要一些重构,但这将是一项新任务
[HttpPost]
public ActionResult Index(FormCollection formCollection, HomeViewModel model)
{
bool showDisabled = model.Refresh;
FilteredList = new List<UnitType>();
Model = new HomeViewModel();
var client = new UnitServiceClient();
var listOfUnitsFromService = client.GetListOfUnits(showDisabled);
if (!showDisabled)
{
FilteredList = listOfUnitsFromService.Where(unit => !unit.Disabled).ToList();
Model.UnitTypes = FilteredList;
return View(Model);
}
FilteredList = listOfUnitsFromService.ToList();
Model.UnitTypes = FilteredList;
return View(Model);
}
答案 0 :(得分:1)
您将Model
返回到自己的视图,因此系统会填充Model
属性,但您的复选框值不属于您的模型!解决方案是完全取消FormCollection
并将复选框添加到视图模型中:
public class HomeViewModel
{
... // HomeViewModel's current properties go here
public bool Refresh { get; set; }
}
在您看来:
@Html.CheckBoxFor(m => m.Refresh)
在您的控制器中:
[HttpPost]
public ActionResult Index(HomeViewModel model)
{
/* Some logic here about model.Refresh */
return View(model);
}
顺便说一句,我看不出你为什么要像现在这样将这个值添加到会话中的任何原因(除非有一些不明显的事情)您发布的代码。