1

ページにDropDownListが必要なので、次のように試します。

アクション:

[HttpGet]
public ActionResult GetPoint() {

  ...
  List<SelectListItem> zooms = new List<SelectListItem>();
    for (int i = 0; i <= 21; i++) {
      if (i == 9)
        zooms.Add(new SelectListItem() { Selected = true, Text = i.ToString(), Value = i.ToString() });
      else
        zooms.Add(new SelectListItem() { Selected = false, Text = i.ToString(), Value = i.ToString() });
            }
  model.myselectlist = zooms;
  ...

  return View(model);
}

そしてビューで:

@Html.DropDownListFor(model => model.Zoom, Model.myselectlist , new { @class = "dropdown" })

したがって、予想どおり、isSelectedアイテムを含むDropDownListがあり9ます。

しかし、同じビューで別のドロップダウンが必要なので、これが私の実装です。

[HttpGet]
public ActionResult GetPoint() {

  ...

  List<SelectListItem> places = new List<SelectListItem>();
  places.Add(new SelectListItem() { Text = "NY", Value = "NY", Selected = false });
  places.Add(new SelectListItem() { Text = "CA", Value = "CA", Selected = false });
  places.Add(new SelectListItem() { Text = "TX", Value = "TX", Selected = false });
  places.Add(new SelectListItem() { Text = "NH", Value = "NH", Selected = true });
  places.Add(new SelectListItem() { Text = "NV", Value = "NV", Selected = false });
  model.myselectlistII = places;

  ...

  return View(model);
}

そしてビューで私は持っています:

@Html.DropDownListFor(model => model.Place, Model.myselectlistII , new { @class = "dropdown" })

ご覧のとおり、NHアイテムにあるリストがありselected = trueます。

そして、私はドロップダウンリストがNH選択されたが、それは起こらず、常に最初のアイテムが選択されたことを期待しています。

ビューでは、奇妙な動作があります。アクションの最後とビューページの行の先頭でコードをデバッグします。すべて問題ありませんが、この行の後で、選択したアイテムが変更され、すべてのアイテムが選択されている@Html.DropDownListForことをもう一度確認します。Model.myselectlistIIプロパティでfalse、何が起こったのかわかりませんか?問題はどこだ?なぜ最初のDropDownForものは何も変更しなかったが、2番目のものは私のリストを変更したのですか?あなたの提案は何ですか?

4

5 に答える 5

0

同じ名前のクエリ文字列がある場合は注意してください。同じ名前の非表示フィールドについては不明です。

すなわち

DropDownListForは、Blockquoteが見つかった場合、DinnerIDのクエリ文字列の値を使用します

于 2013-03-14T16:19:35.943 に答える
0

この問題の解決策は、私たち全員が考えているよりも簡単です...

コントローラーからビューを返すときに行う必要があるのは、ドロップダウンがバインドされている要素のビュー モデルのプロパティを設定することだけです。たとえば、model.Zoom = 'NH' です。

私たちがこれをするとき、このように

@Html.DropDownListFor(model => model.Zoom, Model.myselectlist , new { @class = "dropdown" })

HtmlHelper は、DropDownList に表示するデフォルト値を自動的に取得します

シンプル!

それがあなたと他のすべての人に役立つことを願っています-私のように!- この明らかな問題の解決策を探すのに多くの時間を費やしました。

于 2014-07-01T10:03:45.143 に答える
0

サミュエル・カイレリーは正しいです。プロパティ Zoom と Place を選択リストにバインドするDropDownList Forを使用しています。これらのプロパティの値が何であれ、ビューがレンダリングされるときに選択されるものです。これに関する適切なドキュメントは見つかりませんでしたが、これを裏付ける別のスタック オーバーフローの投稿を次に示します。

asp.net mvc 3事前選択Html.DropDownListForはオタクディナーで動作しません

于 2012-12-31T13:02:57.083 に答える
0

私が自分のプロジェクトの 1 つで行った、ちょっと便利だったのは、
DropDownListForacceptに対してさらに 2 つのオーバーロードを開発することでしたselectedValue

namespace MyMvcApplication.Helpers
{
    public static class ExtensionMethods
    {
        public static MvcHtmlString DropDownListFor<TModel, TProperty>
                             (this HtmlHelper<TModel> helper,
                              Expression<Func<TModel, TProperty>> expression,
                              string selectedValue,
                              IEnumerable<SelectListItem> selectList,
                              string optionLabel,
                              object htmlAttributes)
        {
            if (string.IsNullOrEmpty(selectedValue))
                selectedValue = string.Empty;
            if (selectList != null)
            {
                foreach (SelectListItem sli in selectList)
                {
                    if (sli.Value.ToLower().Trim() == selectedValue.ToLower().Trim())
                    {
                        sli.Selected = true;
                        break;
                    }
                }
            }
            else 
            { 
                selectList = new List<SelectListItem>() 
                                  { new SelectListItem() 
                                          { Text = "", Value = "", Selected = true }
                                  };
            }
            return helper.DropDownListFor(expression, selectList, optionLabel, htmlAttributes);
        }


        public static MvcHtmlString DropDownListFor<TModel, TProperty>
                             (this HtmlHelper<TModel> helper,
                              Expression<Func<TModel, TProperty>> expression,
                              string selectedValue,
                              IEnumerable<SelectListItem> selectList,
                              string optionLabel,
                              IDictionary<string, object> htmlAttributes)
        {
            if (string.IsNullOrEmpty(selectedValue))
                selectedValue = string.Empty;
            if (selectList != null)
            {
                foreach (SelectListItem sli in selectList)
                {
                    if (sli.Value.ToLower().Trim() == selectedValue.ToLower().Trim())
                    {
                        sli.Selected = true;
                        break;
                    }
                }
            }
            else 
            { 
                selectList = new List<SelectListItem>() 
                                  { new SelectListItem() 
                                          { Text = "", Value = "", Selected = true } 
                                  };
            }
            return helper.DropDownListFor(expression, selectList, optionLabel, htmlAttributes);
        }

    }
}

したがって、Views では、次のDropDownListForように、文字列を selectedValue として に渡すことができます。

@using MyMvcApplication.Helpers

@Html.DropDownListFor(model => model.MyData,
                               "Default Value for DropDownList", //Or Model.MySelectedValue
                               Model.MySelectList, null, null)
于 2012-12-31T23:20:03.930 に答える
0

みんなチェックしてね!!! mvc razor ブートストラップ スタイルのドロップダウン リストを選択/選択/バインドするための超静的で機能的な怠惰な方法 ;) おまけとして、フランス語または英語の説明をプラグインしてください !!! あなたは改善する必要がありますが、簡単にアイデアを得ることができます。楽しむ!マイティマート...

              <div class="form-group">
                    <label>@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Quel est votre niveau d'expertise" : "What is your skill level")</label>
                    @if (Model.ClientLevel == null)
                    {
                        <select class="form-control" name="ClientLevel">
                            <option selected value="0">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Choisir un niveau" : "Choose a level")</option>
                            <option value="1">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Débutant" : "Beginner")</option>
                            <option value="2">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Intermédiaire" : "Intermediate")</option>
                            <option value="3">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Advanced" : "Advanced")</option>
                            <option value="4">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Expert" : "Expert")</option>
                            <option value="5">@(HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Autre" : "Other")</option>
                        </select>
                    }
                    else
                    {

                        List<SelectListItem> listItems = new List<SelectListItem>();
                        listItems.Add(new SelectListItem() { Text = "Choose a level", Value = "Choose a level"});
                        listItems.Add(new SelectListItem() { Text = "Beginner", Value = "Beginner" });
                        listItems.Add(new SelectListItem() { Text = "Intermediate", Value = "Intermediate"});
                        listItems.Add(new SelectListItem() { Text = "Advanced", Value = "Advanced"});
                        listItems.Add(new SelectListItem() { Text = "Expert", Value = "Expert"});
                        listItems.Add(new SelectListItem() { Text = HttpContext.Current.Session["culture"].ToString().Equals("fr-CA") ? "Autre" : "Other", Value = "Other"});

                        @Html.DropDownListFor(m => m.ClientLevel, listItems, new { @class = "form-control" })
                    }
                </div>
于 2016-04-08T13:45:20.597 に答える