【发布时间】:2016-11-10 21:48:16
【问题描述】:
为什么我的复选框的值没有传递给我的 ViewModel?
我的观点(我省略了与这篇文章无关的输入标签):
@model Pro.WebUI.ViewModels.UserViewModel
@using (Html.BeginForm("ManageUsers", "Administration", FormMethod.Post,
new { id = "request-form", @class = "form-horizontal" }))
{
<div class="form-group">
<label for="inputAuthorize" class="col-lg-2 control-label">Authorize</label>
<div class="col-lg-8">
<input type="checkbox" id="Authorized" name="Authorized" value="@Model.Authorized" />
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<br /><br />
<button type="submit" class="btn btn-primary">Submit Request</button>
</div>
</div>
}
我的视图模型:
public class UserViewModel
{
[Key]
public string UserID { get; private set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Authorized { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string Notes { get; set; }
}
我的控制器:
[HttpPost]
public ActionResult ManageUsers(UserViewModel model)
{
if (ModelState.IsValid)
{
ProcurementUser obj = new ProcurementUser();
obj.UserName = model.Email;
obj.FirstName = model.FirstName;
obj.LastName = model.LastName;
obj.Email = model.Email;
obj.Phone = model.Phone;
obj.Authorized = model.Authorized;
UserRepository.SaveUser(obj);
//success message
}
return View(model);
}
我没有包含所有输入标签,但是当我在没有复选框的情况下单步执行代码时,所有值都被传递。我查看了关于 SOF 的其他复选框问题,但它们主要使用 @Html.Checkbox 或 @Html.CheckboxFor。我只想使用 input type="checkbox"
【问题讨论】:
-
未选中的复选框不会回发。强类型帮助器生成您的 html 有一个很好的理由 - 他们做得正确!
-
Html.Checkbox 或 Html.CheckboxFor 创建一个复选框输入...但生成执行此操作所需的所有代码(ID 生成它必须是,并且还有一个具有相同名称的 Hidden 来处理未选中框)。
-
我还建议您检查实际生成的 html(特别是
true和false情况下的value属性),它应该变得清晰。<label for="inputAuthorize" ...>的意义何在 - 你的复选框有name="Authorized",而不是name="inputAuthorize"!始终使用强类型的 html 助手! -
@StephenMuecke,很好的信息,谢谢。标签只是引导模板的一部分。
-
@Romias 更多好信息,我不知道 Hidden。
标签: asp.net-mvc razor checkbox viewmodel form-submit