“参数字典包含参数'blueColor'的非可空类型'System.Boolean'的空条目” - 如何解决这个问题?

时间:2013-02-06 19:55:40

标签: c# asp.net-mvc

我对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所在的页面时,由于我已经介绍了这些布尔值,所以一进入页面,我就会继续在标题中提到崩溃。什么地方出了错?请帮帮我。

2 个答案:

答案 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 )
{

}