我刚刚在MVC开始了一个项目。我是MVC 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”的视图,我只需要在该页面上添加一个下拉列表。 我不想为此下拉列表创建模型;我只需要在这个页面上。
答案 0 :(得分: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))
无论哪种方式,这都是此视图的数据,因此它属于您的视图模型。如果您没有使用视图模型,则此视图直接绑定到域实体;你应该使用它们,现在就像开始一样好。
答案 1 :(得分: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>
答案 2 :(得分: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){...}
参考文献的:
答案 3 :(得分:3)
如果您想直接在视图上创建下拉列表而不管控制器和型号,那么您可以使用以下代码创建它
@Html.DropDownList("Departments",
new SelectList(new [] { new KeyValuePair<string, int>( "IT", 0 ), new KeyValuePair<string, int>( "HR", 1 )},"Value", "Key"))