【问题标题】:Checkbox Always Returns False MVC5复选框总是返回 False MVC5
【发布时间】:2019-03-13 22:04:11
【问题描述】:

我在表单中使用复选框和单选按钮,我可以获得除复选框之外的所有值,它总是返回 False。

我的模型代码

public bool Gender { get; set; }  //checkbox

        public bool MStatus { get; set; }  //radio button
 public void Astudent(Student stu)
    {
        try
        {
            NpgsqlConnection con = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["npg"].ConnectionString);
            string stat = "";
            if(stu.MStatus==true)
            {
                stat = "M";
            }
            else
            {
                stat = "S";
            }
            string gnd = "";
            if (stu.Gender == true)
            {
                gnd = "M";
            }
            else
            {
                gnd = "F";
            }
            StringBuilder qry = new StringBuilder();
            qry.Append("select * from fldata(");
            qry.Append("(ARRAY[");
            qry.Append("'(");
            qry.Append(stu.Id);
            qry.Append(",");
            qry.Append(stu.FName);
            qry.Append(",");
            qry.Append(stu.LName);
            qry.Append(",");
            qry.Append(stu.UName);
            qry.Append(",");
            qry.Append(stu.Email);
            qry.Append(",");
            qry.Append(gnd);
            qry.Append(",");
            qry.Append(stat);
            qry.Append(",");
            qry.Append(stu.Department);
            qry.Append(")'])::ful[]");
            qry.Append(")");
            con.Open();
            NpgsqlCommand cmd = new NpgsqlCommand(qry.ToString(), con);
            cmd.ExecuteNonQuery();
            con.Close();
        }
        catch(Exception ex)
        {
             ex.ToString();
        }

    }

我的控制器代码

  public ActionResult Complex() // Add New EE / Student
    {


        return View();
    }


    [HttpPost]
    public ActionResult Complex(Student stu) // Add New EE / Student
    {
        Student empadd = new Student();
        empadd.Astudent(stu);
        return RedirectToAction("ComplexView");

    }

我的查看代码

    @model postgre.Models.Student
@{
    ViewBag.Title = "Complex";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>AddEmployee</h2>



<section class="panel-body">
    @Html.ValidationSummary()
</section>
@using (Html.BeginForm())
{

    <p>
        First Name:
        @Html.TextBoxFor(model => model.FName, new { @class = "form-control" })
    </p>
    <p>
        Last Name:
        @Html.TextBoxFor(model => model.LName, new { @class = "form-control" })
    </p>
    <p>
        User Name:
        @Html.TextBoxFor(model => model.UName, new { @class = "form-control" })
    </p>
    <p>
        Email:
        @Html.TextBoxFor(model => model.Email, new { @class = "form-control" })
    </p>
    <p>
        Gender:<br /> 
        @Html.CheckBoxFor(Model => Model.Gender, new { @class = "form-check-input", @name = "gender", @value = "M", @checked = true }) &nbsp;Male&nbsp;
        @Html.CheckBoxFor(Model => Model.Gender, new { @class = "form-check-input", @name = "gender", @value = "F",})&nbsp;Female&nbsp;
    </p>
    <p>
        Marital Status:<br />   
        @Html.RadioButtonFor(Model => Model.MStatus, new { @class = "form-check-input", @name = "mstat", @value = "S" })&nbsp;Single&nbsp;
        @Html.RadioButtonFor(Model => Model.MStatus, new { @class = "form-check-input", @name = "mstat", @value = "M", @select = true })&nbsp;Married&nbsp;
    </p>
    <p>
        @Html.DropDownListFor(Model => Model.Department,
                      new SelectListItem[]{
                      new SelectListItem() {Text = "Select Your Department", Value=""},
                      new SelectListItem() {Text = "IT", Value="IT"},
                      new SelectListItem() {Text = "Management", Value="Management"},
                      new SelectListItem() {Text = "Commerce", Value="Commerce"}}, new {@class="form-control" })
    </p>
    <p><input type="submit" name="add" value="Add Employee" class="btn btn-primary" /></p>

}

我尝试了很多方法,例如使用 @checked="checked"@Checked=true ,但它不起作用,当我提交表单时它返回 False。 由于我是 MVC 和 Razor 的新手,所以无法获得它。 任何帮助将不胜感激。

【问题讨论】:

  • 复选框绑定到 boolpublic bool Gender 属性没有意义。并且永远不要尝试在使用 HtmlHelper 方法时设置 name 属性或 value 属性 - 幸运的是,您的 @name=".." 完全没有任何作用,并且将 value 设置为 "M" 意味着它无法绑定(a @ 987654334@ 只能有 2 个值之一 - truefalse)
  • 将属性更改为string Gender(或使用enum)并使用单选按钮。
  • 谢谢@StephenMuecke
  • 请原谅偏离主题的评论,但是您构建 SQL 字符串的方式非常糟糕。它为您打开了 SQL 注入攻击的大门。

标签: asp.net asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

我刚刚更新了查看复选框和单选按钮代码,现在可以正常工作了。

对于有同样问题的人,请查看代码,希望对他们有所帮助。

 <p>
    Gender:<br /> 
    @Html.CheckBoxFor(Model => Model.Gender, new { @class = "form-check-input"}) &nbsp;Male&nbsp;
    @Html.CheckBoxFor(Model => Model.Gender, new { @class = "form-check-input"})&nbsp;Female&nbsp;
</p>
<p>
    Marital Status:<br />   
    @Html.RadioButtonFor(Model => Model.MStatus,true, new { @class = "form-check-input"})&nbsp;Single&nbsp;
    @Html.RadioButtonFor(Model => Model.MStatus,false, new { @class = "form-check-input" })&nbsp;Married&nbsp;
</p>

【讨论】:

  • 你的回答完全没有意义(而且它肯定对任何人都没有帮助)。您有 2 个用于 Gender 的复选框,并且只有第一个会被绑定,所以第二个是没有意义的。而且由于它们是复选框,因此用户可以同时选择或不选择,这更没有意义。以及Gender 的值怎么可能是truefalseGender=true 应该是什么意思)
  • 您的MStatus 单选按钮也没有任何意义。同样MStatus=true 应该是什么意思 - 你是说如果你是单身,那么你的婚姻状况是true,如果你已婚,那么你的婚姻状况是false
  • @StephenMuecke 先生,我认为您对编码的了解较少,或者您不了解逻辑。所以我不需要在这里解释。 :P :*
猜你喜欢
  • 2021-08-24
  • 1970-01-01
  • 2020-06-16
  • 2012-02-16
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
相关资源
最近更新 更多