1

引数を使用して、ドロップダウンリストの変更をコントローラーに自動送信しようとしています。POST は発生しますが、このエラーしか表示されません

パラメータ ディクショナリに、「shopping.WebUI」のメソッド「System.Web.Mvc.ViewResult Index(System.String, System.String, Int32)」の null 非許容型「System.Int32」のパラメータ「category」の null エントリが含まれています.Controllers.HomeController'. オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

JQueryスクリプトがあります

$(".autoSubmit select").change(function () {
    $(this).closest('form').submit();
});

ビューのフォーム

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.Action("ShipToCountry", "Filters", new { Model.SelectedCountry })
}

ただし、このアクションに POST する必要があります

[HttpPost]
public ViewResult Index(string country, string currency, int category)
{
    var viewModel = new MainViewModel
    {
        SelectedCountry = country,
        SelectedCurrency = currency,
        Categories = category }
    };
    return View(viewModel);
}

国、通貨、カテゴリのいずれの引数もオプションではありません。

これらのパラメーターをアクションに渡すには、おそらくビューでどのような変更を加える必要がありますか?

ありがとう

4

2 に答える 2

1

エラーは、ビューのcategoryパラメーターIndexが NULL であることを示しています。category投稿する前にパラメーターが値を取得するように HTML と JavaScript を変更するか、次のcategoryように POST メソッドを変更してオプションにする必要があります。

[HttpPost]
public ViewResult Index(string country, string currency, int? category)
{
    var viewModel = new MainViewModel
    {
        SelectedCountry = country,
        SelectedCurrency = currency,
        Categories = category }
    };
    return View(viewModel);
}

編集:

パラメータをオプションにすることはできないため、POST を実行する前に、HTML ですべて<input><select>要素が正しく入力されていることを確認する必要があります (まだ入力されていない場合は正しく名前が付けられています)。

あなたの場合、問題はカテゴリパラメータにあります。自動送信される選択がカテゴリのドロップダウン リストでもあると仮定すると、出力される HTML が次のようになることを確認する必要があります。

<select name="category">
    <option value="1">Category 1</option>
    <option value="2">Category 2</option>
    <option value="3">Category 3</option>
</select>

ここで重要なのは、選択には名前が必要であり (または、この選択の名前と一致するようにメソッド内categoryのパラメーターの名前を変更する必要があります)、オプションには整数値が必要であるということです。categoryIndex


編集2:

<input name="currency">通貨とカテゴリを追加するには、国と同じ場所に<input name="category">フィールドを追加する必要が<form>あります。特にそうである必要はなく<input>、そうである可能性もあり<select>ますが、フィールドはメソッドname内のパラメーターの名前と同じでなければならないことに注意してください。Index

于 2012-10-30T19:12:00.813 に答える
1

「カテゴリ」という名前の入力を含めるか、カテゴリ パラメータを null 可能にします。public ViewResult Index(string country, string currency, int? category)

ドロップダウンが前述の「カテゴリ」入力である場合は、フォームを投稿する前に実際の値があることを確認してください。

于 2012-10-30T19:12:41.577 に答える