4

我刚刚在 MVC 中启动了一个项目。我是 MVC asp.net 的新手。我想添加一个下拉列表框,就像我以前在 asp.net 中添加的那样。

下拉列表框在 asp.net 中的代码一瞥

<asp:Dropdownlist ID="ddlCity" runat="server">
<asp:ItemList Text="Kolkatta" Value="1"/>
<asp:ItemList Text="New Delhi" Value="2"/>
<asp:ItemList Text="Mumbai" Value="3"/>
<asp:ItemList Text="chennai" Value="4"/>
<asp:ItemList Text="Hydrabad" Value="5"/>
</asp:Dropdownlist>

我想要一个以这种方式的下拉列表框....意思是,现在我需要为此创建一个模型和控制器。假设我已经有一个名为“Employee Entry Form”的视图,我只需要在该页面上添加一个下拉列表。我不想为此下拉列表创建模型;我只需要在这个页面上。

4

4 回答 4

37

下拉列表的值应该在您现有的视图模型中:

public class WhateverViewModel
{
    // All of your current viewmodel fields here
    public string SelectedCity { get; set; }
    public Dictionary<string, string> CityOptions { get; set; }
}

使用您想要的任何值(其中 SelectedCity 是您的数字 ID)在您的控制器中填充这些,然后在您的视图中执行以下操作:

@Html.DropDownListFor(m => m.SelectedCity,
    new SelectList(Model.CityOptions, "Key", "Value", Model.SelectedCity))

如果您的值永远不会改变,您可以将它们硬编码为static视图模型的成员,然后执行以下操作:

@Html.DropDownListFor(m => m.SelectedCity,
    new SelectList(WhateverViewModel.CityOptions, "Key", "Value", Model.SelectedCity))

无论哪种方式,这是该视图的数据,因此它属于您的视图模型。如果您不使用视图模型并且此视图直接绑定到域实体;你应该使用它们,现在是开始的好时机。

于 2013-06-10T10:24:38.800 回答
7

您还可以采用另一种方法,即收集 1 个帮助程序类中的所有下拉列表,并返回这些列表,每个列表都带有一个静态函数。

前任。下拉助手类

namespace Asko.Web.Mvc.Infrastructure.Utils
{
    public static class DropdownHelper
    {
        public static IEnumerable<SelectListItem> GetAllCategories()
        {
            var categories = category.GetAll();
            return categories.Select(x => new SelectListItem { Text = x.categoryName, Value = x.categoryId.ToString()}));
        }
    }
}

在这里,您将在页面中使用它:

<td style="width: 150px;">
      <b>Category: </b>
      <br>
 @Html.DropDownListFor(m => m.CategoryId, DropdownHelper.GetAllCategories())
</td>
于 2013-10-31T03:39:24.700 回答
3

如果你想避免使用模型,你可以简单地使用 ViewBag。在你的行动中:

ViewBag.DirectorId = new SelectList(ListOfItemsToAdd, "dataValueField", "dataTextField", movie.DirectorId);

在视图中:

<%= Html.DropDownList("VariableNameToPost", ViewBag.DirectorId) //for asp.net view engine %> 
@Html.DropDownList("VariableNameToPost", ViewBag.DirectorId) // for razor view engine

并且接受该变量的操作将具有以下内容:

public ActionResult theAction(string VariableNameToPost){...}

参考资料:

于 2013-06-10T08:21:49.603 回答
3

如果您想直接在视图上创建一个下拉列表而不考虑控制器和模型,那么您可以使用以下代码创建它

@Html.DropDownList("Departments", 
  new SelectList(new [] { new KeyValuePair<string, int>( "IT", 0 ), new KeyValuePair<string, int>( "HR", 1 )},"Value", "Key")) 
于 2013-06-10T10:38:40.980 回答