我尝试验证时,CheckBox不会更改值

时间:2017-03-16 13:32:48

标签: c# asp.net-mvc

我尝试验证复选框的状态,但我不确定我的语法是否正常?! 鉴于此,我有这个:

    @using (Html.BeginForm())
    {

        <table>
            @for (var i = 0; i < items.Count; i++)
            {
                var curItem = items[i];
                <tr>
                    <td>
                        @Html.CheckBox("chk" + i.ToString(), false)
                        @curItem.Text
                    </td>
                </tr>
            }
        </table>
    }

        <a href="~/Welcome/GoNext" class="btn btn-success" role="button" style="width:130px; height:30px">Start</a>

在我的控制器中我有GoNext操作方法:

public ActionResult GoNext()
{

    bool isOption0Checked = Request["chk0"] != null ? Request["chk0"].ToString() == "true" : false;
    bool isOption1Checked = Request["chk1"] != null ? Request["chk1"].ToString() == "true" : false;
    bool isOption2Checked = Request["chk2"] != null ? Request["chk2"].ToString() == "true" : false;


    if (isOption0Checked && isOption1Checked && isOption2Checked)
    {
        return RedirectToAction("Index","Tab1");
    }
    else
    {
        ModelState.AddModelError(String.Empty, "Message");

        return Index();

    }

所以,当我选中我的复选框时,它不会将值从false更改为true(它总是保持为假)?!我对这种语法有疑问:

bool isOption0Checked = Request["chk0"] != null ? Request["chk0"].ToString() == "true" : false;

这样是正确的吗?!

2 个答案:

答案 0 :(得分:0)

实际上你遇到了一些问题:

  1. 你的按钮(在你的情况下)是一个外形。
  2. 您 按钮发送&#39; GET&#39;请求(不是&#39; POST&#39;),因此值为 您的复选框未发送到服务器。
  3. 您使用的支票 返回false不是因为false中的值 (请求[&#34; chk0&#34;]。ToString()1 =&#34; true&#34;),但由于价值不对 存在(请求[&#34; chk0&#34;] == null)。
  4. 最简单的解决方案:修改表单声明为@using (Html.BeginForm(("GoNext", "Welcome", FormMethod.Post))(如果我没有在语法上出错)

    如果您想要自定义提交按钮,也可以按顺序将自定义按钮放在表单中。

    希望这会有所帮助。

答案 1 :(得分:0)

是的,你是对的!我没有注意到按钮在表单之外,方法也是GET。当我做出这些更改以及上面我怀疑的语法时,一切正常。但我找到了最优雅的解决方案: 我定义了一个模型:

  public class WelcomeModel {
  public bool chk0 {get;set;}
  public bool chk1 { get; set; }
  public bool chk2 { get; set; }

  } 

现在我的GoNext操作如下所示:

  [HttpPost]
  public ActionResult GoNext()
  {
  WelcomeModel CheckState = new WelcomeModel();
  TryUpdateModel(CheckState );
  if (CheckState.chk0 && CheckState.chk1 && CheckState.chk2 != false)
  {
  return RedirectToAction("Index", "Tab1");
  }

  else
  {
  ModelState.AddModelError(String.Empty, "Message");

  return Index();

  }