加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 带MVC剃刀的输入类型复选框

发布时间:2020-12-16 07:35:19 所属栏目:asp.Net 来源:网络整理
导读:为什么我的复选框的值没有传递给我的ViewModel? 我的观点(我省略了与此帖子无关的输入标签): @model Pro.WebUI.ViewModels.UserViewModel@using (Html.BeginForm("ManageUsers","Administration",FormMethod.Post,new { id = "request-form",@class = "for
为什么我的复选框的值没有传递给我的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>
 }

我的ViewModel:

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”

解决方法

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

假设您的模型具有Authorized = true,您的加价将是:

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

同样,错误状态会导致:

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

但这些不是“选中”复选框 – 它们仍然是“未选中”,并且需要选中已检查的属性设置:

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

正如斯蒂芬指出的那样 – 未经检查的复选框不会将任何数据发送回服务器,这样您就不会对所选的选项感到困惑.

最后,正如我们已经注意到的那样,你的< label> element用于查找inputAuthorize而不是Authorized的不存在的字段.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读