0

ここにたどり着いた助けに感謝します-コントローラーに次のコードがあります:

 var stands = db.Stands.ToList().Where(s => s.ExhibitorID == null)
              .Select(s => new SelectListItem
              {
                  Value = s.StandID.ToString(),
                  Text = s.Description + "-- £" + s.Rate.ToString()
              });


        ViewBag.StandID = new SelectList(stands, "Value", "Text");

そして、次のように私のビューでレンダリングします。

<div class="editor-field"> 
    @Html.DropDownList("StandID", new {style = "width:150px"})
</div> 

ただし、ビューでは、次のエラーが表示されます。

CS1928: 'System.Web.Mvc.HtmlHelper' には 'DropDownList' の定義と最適な拡張メソッド オーバーロード 'System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string, string )' に無効な引数があります

新しい {style=.... を削除すると問題ありません。

このエラーを発生させずにドロップダウンリストの幅を設定するにはどうすればよいですか?

ありがとうございました、

マーク

4

2 に答える 2

3

いくつかの変更を加える必要があります。まず、コントローラーコードを次のように変更します。

ViewBag.StandID = new SelectList(stands, "Value", "Text");

これに:

ViewBag.StandList = new SelectList(stands, "Value", "Text");

次に、ヘルパーを次のように変更します。

@Html.DropDownList("StandID", (SelectList)ViewBag.StandList, new {style = "width:150px"})

html要素の名前がアイテムのコレクションと異なることを確認することが重要です。そうでない場合、あらゆる種類の問題が発生します。

強く型付けされたビューモデルを使用することをお勧めします。

@Html.DropDownListFor(m => m.StandID, Model.StandList, new {style="width:150px;"})
于 2012-10-04T19:08:01.923 に答える
1

@Html.DropDownList に正しいパラメータを渡していません。ここの MSDN ドキュメントから: http://msdn.microsoft.com/en-us/library/dd470380(v=vs.100).aspx

次のオーバーロードを使用したいようです。

public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper,
    string name,
    IEnumerable<SelectListItem> selectList,
    Object htmlAttributes
)

したがって、最初のパラメーターは正しい名前文字列ですが、2 番目のパラメーターとして SelectList が必要であり、3 番目のパラメーターとして HtmlAttributes が必要です。次のようにしてみてください。

<div class="editor-field">
     @Html.DropDownList("StandID", ViewBag.StandID, new {style = "width:150px"})
</div> 

アップデート:

ViewBag に正しいものを渡しているかどうかもわかりません。新しい SelectList オブジェクトと同じに設定しており、DropDownList には SelectListItems のコレクションが必要です。

コントローラーでこれを試してください:

var stands = db.Stands.ToList().Where(s => s.ExhibitorID == null)                  
    .Select(s => new SelectListItem                  
    {                      
        Value = s.StandID.ToString(),                      
        Text = s.Description + "-- £" + s.Rate.ToString()
    });                    


ViewBag.StandID = stands;

アップデート:

これが私がこれと同じことを達成する方法です。IEnumerable を返す静的メソッドがあり、ビューでそのメソッドを参照します。(VB 構文で申し訳ありません)

Namespace Extensions


    Public Module Utilities

        Public Function SalutationSelectList(Optional ByVal Salutation As String = "") As IEnumerable(Of SelectListItem)


            Dim ddl As New List(Of SelectListItem)

            ddl.Add(New SelectListItem With {.Text = "", .Value = "", .Selected = If(Salutation = "", True, False)})
            ddl.Add(New SelectListItem With {.Text = "Mr.", .Value = "Mr.", .Selected = If(Salutation = "Mr.", True, False)})
            ddl.Add(New SelectListItem With {.Text = "Ms.", .Value = "Ms.", .Selected = If(Salutation = "Ms.", True, False)})
            ddl.Add(New SelectListItem With {.Text = "Mrs.", .Value = "Mrs.", .Selected = If(Salutation = "Mrs.", True, False)})
            ddl.Add(New SelectListItem With {.Text = "Dr.", .Value = "Dr.", .Selected = If(Salutation = "Dr.", True, False)})

            Return ddl

        End Function
    End Module
End Namespace



@Html.DropDownListFor(Function(org) org.Salutation, SalutationSelectList())
于 2012-10-04T18:47:12.200 に答える