我有一个像这样的复选框:
<%= Html.CheckBoxFor(x => x.IsSendingQualitySurvey) %>/>
选中复选框并提交时,我会得到典型的2个表单值:
IsSendingQualitySurvey: true
IsSendingQualitySurvey: false
这对于mvc modelbinder处理复选框的方式非常有效。
然后在控制器动作中:
[HttpPost]
public ActionResult Edit(Guid id, TicketEditViewModel ticketEditViewModel)
ticketEditViewModel.IsSendingQualitySurvey
(普通布尔)总是假的。
我没有任何自定义模型绑定器,它可以在其他地方使用。 奇怪的是,我在很久以前的另一个视图中遇到了同样的问题,我必须手动创建输入,如下所示:
<input type="checkbox" value="true" name="<%=Html.NameFor(x => x.IsRequestingVisit) %>" id="<%=Html.NameFor(x => x.IsRequestingVisit) %>" />
这很有效,但是当我将完全相同的内容复制到另一个视图时,该值仍然总是为假。
抓住了吗?
感谢。
答案 0 :(得分:1)
模型绑定器可能不会拾取绑定。我的建议是将你的行动改为:
[HttpPost]
public ActionResult Edit(Guid id, TicketEditViewModel model)
模型绑定器想要在Request中查找具有与您的对象名称匹配的前缀的属性。由于客户端没有命名前缀,因此没有带前缀&#34; ticketEditViewModel&#34;的属性。
另一种方法是在页面上命名变量:
<% var ticketEditViewModel = Model; %>
<%= Html.CheckBoxFor(model => ticketEditViewModel.IsSendingQualitySurvey) %>
答案 1 :(得分:1)
编辑得到了错误的结局......对不起
您是否尝试从帖子数据中提取原始值,如下所示:
在控制器中:
[HttpPost]
public ActionResult Edit(Guid id, TicketEditViewModel ticketEditViewModel,
FormCollection fc) {
if(fc["IsSendingQualitySurvey"].Contains("true")) {
//Do something.
}
}
在视图中:
<%= Html.CheckBoxFor(model => model.IsSendingQualitySurvey) %>
希望这会有所帮助..
答案 2 :(得分:0)
以下型号:
public class StartViewModel {
public string Id{ get; set; }
public string Name { get; set; }
public bool Accept { get; set; }
}
- &GT; Accept = false。
解决方案:改变公共布尔接受{get;组;公共字符串Accept {get;组; }
提交时,如果选中复选框,则“接受”值=“开”。您可以顺便检测检查值。
答案 3 :(得分:0)
我不确定这是否对您有用,但事实上它为我解决了同样的问题。尝试添加(不替换)相同模型属性的隐藏字段,如下所示:
@Html.HiddenFor(x => x.IsSendingQualitySurvey)