我是MVC的新手,我正在尝试创建自己的扩展方法,以便我可以添加到我的剃刀视图中可用的html助手.Html.DropDownListFor()允许您为模型上的任何属性创建下拉列表.我想创建一个叫做的帮助程序Html.StateDropDownListFor()完全相同的事情,除了加载美国所有50个州的下拉列表.这样我就不必为我创建的每个状态下拉列表创建一个SelectList.最简单的方法是什么?现在我有这个:
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownList(this HtmlHelper html)
{
// ???
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至关闭了吗?我不想重建整个文本框助手,我只是想创建一个利用现有文本框助手的助手,但是为我做了SelectList.在我的观点中,我可以这样做Html.StateDropDownList(x => x.State)
非常感谢您的回答.
这是答案!
你们是一个很好的帮助,谢谢!这是完整的扩展方法,以防其他任何人使用它.
public static MvcHtmlString StateDropDownListFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
Dictionary<string, string> stateList = new Dictionary<string, string>()
{
{"AL"," Alabama"},
{"AK"," Alaska"},
{"AZ"," Arizona"},
{"AR"," Arkansas"},
{"CA"," California"},
{"CO"," Colorado"},
{"CT"," Connecticut"},
{"DE"," Delaware"},
{"FL"," Florida"},
{"GA"," Georgia"},
{"HI"," Hawaii"},
{"ID"," Idaho"},
{"IL"," Illinois"},
{"IN"," Indiana"},
{"IA"," Iowa"},
{"KS"," Kansas"},
{"KY"," …Run Code Online (Sandbox Code Playgroud) 给出以下MVC剃刀代码,它从列表中创建一个下拉列表:
@Html.DropDownList("MyTestList", null, new { @class = "btn btn-default dropdown-toggle" })
Run Code Online (Sandbox Code Playgroud)
这将创建以下下拉列表:

使用getbootstrap.com中的代码时:
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
Dropdown
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">test1</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">test2</a></li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
它将显示如下的下拉列表:

问题:@Html.DropDownList使用MVC中的HTML代码时,是否可以获得相同的外观和感觉?
我正在使用MVC 5,我正在尝试编写一些Bootstrap扩展方法.我的目标是用'覆盖' Html.ActionLink方法Html.BootstrapLinkButton.该BootstrapLinkButton方法应生成一个"btn btn-default"自动附加的css类的链接.我的代码到目前为止:
public static MvcHtmlString BootstrapLinkButton(this HtmlHelper htmlHelper,
string linkText,string actionName, string controllerName,
object routeValues = null, object htmlAttributes = null)
{
var attributes =
HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
if (attributes.ContainsKey("class"))
{
object value;
attributes.TryGetValue("class", out value);
value = (value as string) + " btn btn-default";
attributes["class"] = value;
}
else
{
attributes["class"] = "btn btn-default";
}
return htmlHelper.ActionLink(
linkText, actionName, controllerName, routeValues,
new Dictionary<string, object>(attributes));
}
Run Code Online (Sandbox Code Playgroud)
这给了我HTML中的以下结果:
<a comparer="System.Collections.Generic.GenericEqualityComparer`1[System.String]"
count="3"
keys="System.Collections.Generic.Dictionary`2
+KeyCollection[System.String,System.Object]"
values="System.Collections.Generic.Dictionary`2 …Run Code Online (Sandbox Code Playgroud)