【发布时间】:2014-01-14 13:14:49
【问题描述】:
我已经为 mvc 和 c# 项目中的文本框和下拉列表编写了一个 htmlhelper 扩展方法,目前我正在使用 Kendo UI,并已使用 Kendo 为 Dropdownlist 和 Textbox 提供的控件。
我尝试过使用与 MVC 中相同的方法
public static MvcHtmlString Custom_DropDownList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> list)
{
return Custom_DropDownList(helper, name, list);
}
但我无法使用 kendo 下拉菜单公开上述辅助方法。我知道,这是错误的,我一直在为此苦苦挣扎。
我正在从数据库中填充下拉值,除了列表中的当前值之外, 我愿意
在列表顶部追加一个空白行
或列表顶部的(ALL)选项(当有多个值时),
如果下拉列表只有一个值,则不会显示(ALL)。
如果有人在 kendo 中实现了下拉辅助方法,请分享想法或建议我解决此问题的方法。
编辑
对普通的下拉列表使用自定义 htmlhelper,我们这样做
public static MvcHtmlString StateDropDownList(this HtmlHelper html)
{
return html.TextBox("foo");
}
然后我们就可以在代码中使用这个htmlhelper了。
如何为 Kendo().DropDownList() 实现相同的代码,因为我还没有看到任何这样做的示例,我也不知道 Kendo 下拉列表如何在内部解析 html。我试图做类似下面的事情,但我找不到解决方案
public static MvcHtmlString Custom_DropdownList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> list, string option, object htmlAttributes)
{
var divTag = new TagBuilder("div");
divTag.AddCssClass("k-list-container k-popup k-group k-reset");
divTag.Attributes.Add("id", "ddlMemType-list");
divTag.Attributes.Add("data-role", "popup");
divTag.Attributes.Add("style", "position: absolute; height: auto; display: none;");
TagBuilder ulTag = new TagBuilder("ul");
ulTag.Attributes.Add("id", "ddlMemType_listbox");
ulTag.MergeAttribute("unselectable", "on");
ulTag.AddCssClass("k-list k-reset");
ulTag.MergeAttribute("tabindex", "-1");
ulTag.MergeAttribute("role", "listbox");
ulTag.MergeAttribute("aria-hidden", "false");
ulTag.MergeAttribute("aria-live", "off");
ulTag.MergeAttribute("style","overflow: auto;");
ulTag.InnerHtml += Environment.NewLine;
foreach (var item in list)
{
var liTag = new TagBuilder("li");
liTag.MergeAttribute("tabindex", "-1");
liTag.MergeAttribute("role", "option");
liTag.MergeAttribute("unselectable", "on");
liTag.AddCssClass("k-item k-state-selected k-state-focused");
liTag.Attributes.Add("id", "ddlMemType_option_selected");
liTag.MergeAttribute("aria-selected", "true");
ulTag.InnerHtml += string.Format(" {0}{1}{2}", liTag.ToString(), item.Text, Environment.NewLine);
}
divTag.InnerHtml += string.Format("{0}{1}", ulTag.ToString(), Environment.NewLine);
return MvcHtmlString.Create(divTag.ToString(TagRenderMode.Normal));
}
【问题讨论】:
-
你能提供更多关于你想要做什么的细节吗?我不明白你在问什么。我已经做过类似的事情,所以如果你能提供更好的细节,我可能会回答你的问题。
-
@MailmanOdd:让我为您提供一个我想做的示例,供您参考。见编辑。谢谢
-
我使用了您的代码并自己制作了 TextBoxFor...stackoverflow.com/questions/24172261/…
标签: c# asp.net-mvc kendo-ui