2

私は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 があるページを読み込むと、これらのブール値を導入したため、ページに入るとすぐにタイトルに記載されているクラッシュが発生し続けます。何が悪かったのか?私を助けてください。

4

2 に答える 2

5

エラーは本当にすべてを物語っています。Bools を 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 パラメータを Nullable にしない場合) ページをロードするには、このメソッドに値を渡す必要があります。

ActionLink は、次のように、null 非許容ブール値のアクションに何らかの値を渡す必要があります。

@Html.ActionLink("Cards", "SearchIndex", "Card", new {blueColor = true, redColor = false}, null)
于 2013-02-06T20:09:43.067 に答える