Asp.net mvc 重写Html.DropDownListFor()
我在Mysql中有一个定义表。 这对我来说太容易了。范例Asp.net mvc 重写Html.DropDownListFor(),asp.net-mvc,custom-controls,html-helper,Asp.net Mvc,Custom Controls,Html Helper,我在Mysql中有一个定义表。 这对我来说太容易了。范例 GroupId Name 1 Colors 2 Size DefinitionId GroupId Name 1 1 Black 2 1 Green 3 2 S 4 2 M 我使用DropdownListFor。我想创建像DropDownList这样的自定义控件。 例如: Cu
GroupId Name
1 Colors
2 Size
DefinitionId GroupId Name
1 1 Black
2 1 Green
3 2 S
4 2 M
我使用DropdownListFor。我想创建像DropDownList这样的自定义控件。
例如:
CustomDropDownList(“sizeId”,2)实际上它很简单
//This overload is extension method accepts name, list and htmlAttributes as parameters.
public static MvcHtmlString DefinitionFor(this HtmlHelper helper, string name, int GroupId, object htmlAttributes)
{
// ref to db
var db = (Service.Interfaces.ISet<Definition>)
DependencyResolver.Current.GetService(typeof(Interfaces.ISet<Definition>));
//Creating a select element using TagBuilder class which will create a dropdown.
TagBuilder dropdown = new TagBuilder("select");
//Setting the name and id attribute with name parameter passed to this method.
dropdown.Attributes.Add("Key", name);
dropdown.Attributes.Add("Id", name);
//Created StringBuilder object to store option data fetched oen by one from list.
StringBuilder options = new StringBuilder();
//Get Item(s)
var items = db.Get(new Definition() { Group = new Group() { Id = GroupId } }).List;
foreach (var item in items)
{
//Each option represents a value in dropdown. For each element in the list, option element is created and appended to the stringBuilder object.
options = options.Append("<option value='" + item.Id + "'>" + item.Key + "</option>");
}
//assigned all the options to the dropdown using innerHTML property.
dropdown.InnerHtml = options.ToString();
//Assigning the attributes passed as a htmlAttributes object.
dropdown.MergeAttributes(new RouteValueDictionary(htmlAttributes));
//Returning the entire select or dropdown control in HTMLString format.
return MvcHtmlString.Create(dropdown.ToString(TagRenderMode.Normal));
}
//此重载是扩展方法,它接受name、list和htmlAttributes作为参数。
公共静态MvcHtmlString定义(此HtmlHelper、字符串名称、int GroupId、对象htmlAttributes)
{
//参考数据库
var db=(Service.Interfaces.ISet)
DependencyResolver.Current.GetService(typeof(Interfaces.ISet));
//使用TagBuilder类创建选择元素,该类将创建下拉列表。
标记生成器下拉菜单=新建标记生成器(“选择”);
//使用传递给此方法的name参数设置name和id属性。
属性。添加(“键”,名称);
添加(“Id”,名称);
//创建了StringBuilder对象,用于存储从列表中提取的选项数据。
StringBuilder选项=新建StringBuilder();
//获取项目
var items=db.Get(新定义(){Group=newgroup(){Id=GroupId}).List;
foreach(项目中的var项目)
{
//每个选项代表下拉列表中的一个值。对于列表中的每个元素,将创建option元素并将其附加到stringBuilder对象。
options=options.Append(“+item.Key+”);
}
//使用innerHTML属性将所有选项分配给下拉列表。
dropdown.InnerHtml=options.ToString();
//分配作为htmlAttributes对象传递的属性。
MergeAttributes(新的RouteValueDictionary(htmlAttributes));
//以HTMLString格式返回整个选择或下拉控件。
返回MvcHtmlString.Create(dropdown.ToString(TagRenderMode.Normal));
}
然后,我可以这样打电话
<select Id="sizeId" name="sizeId">
<option value="3">M</option>
<option value="4">S</option>
</selec>
<div>
@Html.DefinitionFor("colorId", 2, new { @class = "form-control" });
</div>
@Html.DefinitionFor(“colorId”,2,新的{@class=“formcontrol”});
快乐编码 不清楚你在问什么。你希望输出是什么?很简单。像DropdownListFor。将返回选择选项元素有哪些选项?您希望此方法生成什么html?如果您只想在下拉列表中显示2个元素,请在controller中筛选列表,并在列表中仅显示2个元素。然后根据您想要的筛选结果在控制器中生成一个
IEnumerable
,并将其返回到视图,然后使用@html.DropDownListFor()