我尝试验证复选框的状态,但我不确定我的语法是否正常?! 鉴于此,我有这个:
@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;
这样是正确的吗?!
答案 0 :(得分:0)
实际上你遇到了一些问题:
false
中的值
(请求[&#34; chk0&#34;]。ToString()1 =&#34; true&#34;),但由于价值不对
存在(请求[&#34; chk0&#34;] == null)。最简单的解决方案:修改表单声明为@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();
}