Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 重写Html.DropDownListFor()_Asp.net Mvc_Custom Controls_Html Helper - Fatal编程技术网

Asp.net mvc 重写Html.DropDownListFor()

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

我在Mysql中有一个定义表。 这对我来说太容易了。范例

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()