3

asp.net とカミソリ エンジンで、正しい要素が選択されたドロップダウン リストを作成するのに問題があります。何を試しても、使用可能な値のいずれかが「0」の場合、その項目は常に選択されます。

私が作成しようとしているのは、-2 から 2 までの評価の選択です。0 は中間値ですが、事前に選択する必要はありません。ユーザーは決定を下す必要があるため、デフォルト値は空にする必要があります。

以下のコードに示すように、オプション ラベルを使用してドロップダウン リストを作成しても、デフォルトは空のままになりません。これは、たとえば値が 1 ~ 5 の場合に機能します。

@Html.DropDownListFor(model => model.Rating, new SelectList(new List<SelectListItem>()
{
    new SelectListItem() {Text = "-2", Value = "-2"},
    new SelectListItem() {Text = "-1", Value = "-1"},
    new SelectListItem() {Text = "0", Value = "0"},
    new SelectListItem() {Text = "1", Value = "1"},
    new SelectListItem() {Text = "2", Value = "2"}
}, "Value", "Text"), String.Empty, new { @class = "rating-select" })

上記のコードは、選択されたタグを 0-item に追加し、次の html を作成します。

<select class="rating-select valid" data-val="true" data-val-number="The field Rating must be a number." data-val-required="Rating is required." id="Rating" name="Rating">
    <option value=""></option>
    <option value="-2">-2</option>
    <option value="-1">-1</option>
    <option selected="selected" value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
</select>

空白の値を選択するすべてのバージョンを試しましたが、結果はすべて同じです。0-item は、選択されたタグで生成されます。

Selected = true で空白のアイテムを作成する

@Html.DropDownListFor(model => model.Rating, new SelectList(new List<SelectListItem>()
{
    new SelectListItem() {Text = "Null", Value = "", Selected = True},
    new SelectListItem() {Text = "-2", Value = "-2"},
    new SelectListItem() {Text = "-1", Value = "-1"},
    new SelectListItem() {Text = "0", Value = "0"},
    new SelectListItem() {Text = "1", Value = "1"},
    new SelectListItem() {Text = "2", Value = "2"}
}, "Value", "Text"), String.Empty, new { @class = "rating-select" })

空の項目オブジェクトを作成し、そのオブジェクトを selectlist で選択済みとして設定する

@{SelectListItem blankItem = new SelectListItem() {Text = "Null", Value = ""}}
@Html.DropDownListFor(model => model.Rating, new SelectList(new List<SelectListItem>()
{
    blankItem,
    new SelectListItem() {Text = "-2", Value = "-2"},
    new SelectListItem() {Text = "-1", Value = "-1"},
    new SelectListItem() {Text = "0", Value = "0"},
    new SelectListItem() {Text = "1", Value = "1"},
    new SelectListItem() {Text = "2", Value = "2"}
}, "Value", "Text", blankItem), String.Empty, new { @class = "rating-select" })

値の 1 つが 0 の場合、上記のいずれも機能しません。

誰かが適切な解決策を知っていますか、それともフレームワークのバグですか?

回避策のハックで解決できますが、むしろしたくありません...

4

2 に答える 2