带有 MVC 剃须刀的输入类型复选框



为什么我的复选框的值没有传递给我的 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> 归档而不是 @Html.CheckboxFor ,我们可以使用"checked="checked""语法,如以下代码所示:

<input type="checkbox" id="Authorized" name="Authorized" value="true" @(Model.Authorized ? "checked="checked"" : "") />

正如评论中所暗示的那样,您遇到的问题是您没有真正正确创建复选框:

假设您的模型具有Authorized = true您的标记将是:

<input type="checkbox" id="Authorized" name="Authorized" value="true" />

同样,false状态将导致:

<input type="checkbox" id="Authorized" name="Authorized" value="false" />

但这些不是"选中"复选框 - 它们仍然是"未选中"的,并且需要checked属性设置:

<input type="checkbox" id="Authorized" name="Authorized" value="true" checked />

正如斯蒂芬指出的那样 - 未选中的复选框不会将任何数据发送回服务器,这样您就不会对选择哪些选项感到困惑。

最后,如前所述,您的<label>元素用于查找inputAuthorize而不是Authorized的不存在的字段。

如果您要使用 @Html.CheckboxFor@Html.LabelFor 帮助程序类,所有这些问题都将得到解决。

相关内容

  • 没有找到相关文章

最新更新