我对MVC应用程序很新,我遇到了将html助手和控制器结合起来的问题。我希望我能够很好地揭露我的问题,所以这里有:
所以我有这些复选框:
<p>
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm())
{
<p>
<label>
Obj Colors
</label>
Blue : @Html.CheckBox("blueColor", true)
Red : @Html.CheckBox("redColor", true)
Green : @Html.CheckBox("greenColor", true) <br/>
Black : @Html.CheckBox("blackColor", true)
White : @Html.CheckBox("whiteColor", true)
</p>
(...)
}
我的控制器中有这个巨大的方法:
public ActionResult SearchIndex(string objName, string objType, string objSymbol, string objValue, string artistName, bool blueColor, bool redColor, bool greenColor, bool blackColor, bool whiteColor, bool colorless)
{
(...)
if (blueColor || redColor || greenColor || blackColor || whiteColor || colorless)
{
(...)
}
(...)
}
但是当我加载SearchIndex所在的页面时,由于我已经介绍了这些布尔值,所以一进入页面,我就会继续在标题中提到崩溃。什么地方出了错?请帮帮我。
答案 0 :(得分:3)
错误说明了一切,真的。 Bool不能为null,显然是blueColor。
您可以将方法签名更改为接受Nullable<bool>
,如此
public ActionResult SearchIndex(string objName, string objType, string objSymbol, string objValue, string artistName, bool? blueColor, bool? redColor, bool? greenColor, bool? blackColor, bool whiteColor, bool colorless)
{
或者,如果您希望将值从视图传递到方法中,请将您在表单中发布的助手包装起来并使控制器操作接受发布请求
@using (Html.BeginForm( ))
{
Blue : @Html.CheckBox("blueColor", true)
Red : @Html.CheckBox("redColor", true)
Green : @Html.CheckBox("greenColor", true) <br/>
Black : @Html.CheckBox("blackColor", true)
White : @Html.CheckBox("whiteColor", true)
}
[HttpPost]
public ActionResult SearchIndex(string objName, string objType, string objSymbol, string objValue, string artistName, bool blueColor, bool redColor, bool greenColor, bool blackColor, bool whiteColor, bool colorless)
{
修改
或者,如果您尝试将此作为get,由于某种原因,您必须在表单声明中指定:
@using (Html.BeginForm("SearchIndex", "ControllerName", FormMethod.Get ))
{
但是(如果你没有制作bool params Nullable的话)你必须将值传递给这个方法才能加载页面
你的ActionLink必须将一些值传递给非可空bool的动作,如下所示:
@Html.ActionLink("Cards", "SearchIndex", "Card", new {blueColor = true, redColor = false}, null)
答案 1 :(得分:0)
使用true或false初始化API签名中的布尔值
public ActionResult SearchIndex(string objName, string objType, bool blueColor =false, bool redColor=true )
{
}