1

次のように mvc html ヘルパー チェックボックスを使用します。

@Html.DropDownList(item.QuestionId.ToString(),
 new SelectList(((DropDownList)item).Options, "OptionId", "Name"), 
"Select Please")

そして、私が提出するとき、私の中で[http] controller、私は値を得ることができます

    [HttpPost]
    public ActionResult TestList(FormCollection formCollection)
    {
        foreach (var res in formCollection.AllKeys) 
        {
            string Selected = null;
            Selected = formCollection[res];
        }

しかし、たとえば「A」を選択するとAが得られますが、何も選択しないと(定義したように「選択してください」と表示されます)、それになりたいnullのですが、今""はそれが価値があることを意味します...私次のようにしたいだけです:何も選択しない場合は何も送信しません。AllKeysでもStringでも何も意味Selectedしません。選択しない場合、allkeysには何もありません。ありがとう

ps: 例:

foreach (var SubItem in ((RadioButtonList)item).Options)
{
  @Html.RadioButton(item.SurveyItemId.ToString(), SubItem.OptionId) @SubItem.Name 
}

質問のオプションが表示されます。Aを選択した場合、コントローラーからAを取得できます。Bを選択しなかったため、コントローラーのAllKeysにはB、C、またはDが含まれていないため、このようなドロップダウンリストが必要です。誰も選択しませんでした。B、C、D を選択しなかったのと同じように、"" などは表示されません。AllKeys には何も表示されません。

4

1 に答える 1

3

まず、これはチェック ボックスではありません。それがドロップダウンリストです。正しい情報で質問することが重要です。そうしないと、間違った答えが返ってきます。

第二に、これは不可能であり、MVC とは何の関係もありません。これはブラウザーによって行われます。実際に何かを送信しているときに、ブラウザーに「null」を送信させる方法はありません。http 投稿には「null」という概念はありません。

null を取得する唯一の方法は、値がまったく投稿されていない場合です。そうしないと、モデル バインダーは、実際の null と、実際に空の文字列を投稿するタイミングとの違いを認識できませんでした。

フォーム コレクションに直接アクセスしてモデル バインディングをバイパスしているため、カスタム モデル バインダーを作成することさえできません。

于 2013-06-05T18:40:26.413 に答える