5

さて、ここで何時間か読んだ後、すべての解決策を試してみましたが失敗しましたが、この記事も見つかりました。

簡単に言えば。

これが私のビューです(すべての組み合わせ)

@Html.DropDownList("yearDropDown",(IEnumerable<SelectListItem>)ViewBag.yearDropDown)
@Html.DropDownList("yearDropDownxxx",(IEnumerable<SelectListItem>)ViewBag.yearDropDown)
@Html.DropDownList("yearDropDown",(<SelectList>)ViewBag.yearDropDown)
@Html.DropDownList("yearDropDown")

これが私のコントローラーです

public ActionResult(int year)
{
var years = new int[] { 2007, 2008, 2009, 2010, 2011, 2012 }
                .Select(x => new SelectListItem { 
                    Text = x.ToString(), 
                    Value = x.ToString(), 
                    Selected=x==year }).Distinct().ToList();

            years.Insert(0, new SelectListItem { Value = null, Text = "ALL YEARS" });
            ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault());
return View();
}

これが私のレンダリングされたHTMLです。選択された場所が見つかりません。

<select id="yearDropDown" name="yearDropDown"><option value="">ALL YEARS</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>

言うまでもありませんが、ウォッチをチェックインすると、SelectList には、コントローラーに渡された選択された年が入力された SelectedValue プロパティがあります。しかし、ビューでレンダリングすると、最初のオプションに移動します。

ではなく、 の解決策が必要DropDownListですDropDownListFor。ここで他の人が同じ助けを求めているのを見たので、これを強調しています。多くの人が指示を出し、DropDownListFor を使用するように指示しました。DropDownList を使用する必要があるのには理由があります。

解決策:私自身の答えを見てください。ただし、ここに私が行った簡単な変更を示します。

コントローラ:

ViewBag.yearDropDown = years;

意見:

@Html.DropDownList("yearDropDown")
4

5 に答える 5

2
ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault());

ここの最後のパラメーターは ですがSelectListItem、選択する必要がありvalueます (例の文字列)

SelectList コンストラクター (IEnumerable、String、String、Object)

于 2013-03-28T16:28:33.683 に答える
1

私はそれが古い質問であることを知っていますが、何かを正しく行ったことがあるので、別の解決策を共有しますが、かみそりにバグがある可能性があるため、リクエストとレスポンスの後に選択した値が表示されません 私が持っていたこの状態では、ビューバッグを使用して選択オプションを使用できます。

コントローラーには次のものがありました:

 ViewBag.MyData = GetAllData(strSelected);
... 

コントローラーのプライベート関数として、次のものがありました。

  private List<SelectListItem> GetAllData(List<string> selectedData)
    {

        return MyGetAll().Select(x =>
            new SelectListItem
            {
                Text = x.Point,
                Value = x.Amount.ToString(),
                Selected = selectedPrizes.Contains(x.Amount.ToString())
            })
            .ToList();
    }  

そして.cshtmlには次のものがありました:

<select id="Amount" name="Amount" multiple="multiple">
  @foreach (var listItem in (List<SelectListItem>)ViewBag.MyData)
   {
     <option value="@listItem.Value" @(listItem.Selected ? "selected" : "")>
       @listItem .Text
     </option>
   }
</select>

同様の問題に役立つことを願っています:)

于 2016-07-18T05:26:22.527 に答える
0

ViewBag プロパティの名前を DropDownList の名前と一致しないように変更します。ViewBag.yearDropDownDDの代わりに使用しViewBag.yearDropDownます。

また、間違って SelectList を作成しています。配列アイテムではなく、選択した値を渡す必要があります。

ViewBag.yearDropDown = new
SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault().Value);
于 2013-03-28T16:05:55.457 に答える
-1

私が学ぶために最初に行くべきだった場所....そして私はしませんでした.

これが私の解決策です

ご回答ありがとうございます。心から感謝する。今、自分の足を撃ちたい気分です。ブログを 2 時間読んで、この例を再現するのに 2 分かかり、完璧に動作しました...

于 2013-03-28T16:11:01.290 に答える