Che*_*hev 47 html c# asp.net asp.net-mvc asp.net-mvc-3
我是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"," Kentucky"},
{"LA"," Louisiana"},
{"ME"," Maine"},
{"MD"," Maryland"},
{"MA"," Massachusetts"},
{"MI"," Michigan"},
{"MN"," Minnesota"},
{"MS"," Mississippi"},
{"MO"," Missouri"},
{"MT"," Montana"},
{"NE"," Nebraska"},
{"NV"," Nevada"},
{"NH"," New Hampshire"},
{"NJ"," New Jersey"},
{"NM"," New Mexico"},
{"NY"," New York"},
{"NC"," North Carolina"},
{"ND"," North Dakota"},
{"OH"," Ohio"},
{"OK"," Oklahoma"},
{"OR"," Oregon"},
{"PA"," Pennsylvania"},
{"RI"," Rhode Island"},
{"SC"," South Carolina"},
{"SD"," South Dakota"},
{"TN"," Tennessee"},
{"TX"," Texas"},
{"UT"," Utah"},
{"VT"," Vermont"},
{"VA"," Virginia"},
{"WA"," Washington"},
{"WV"," West Virginia"},
{"WI"," Wisconsin"},
{"WY"," Wyoming"},
{"AS"," American Samoa"},
{"DC"," District of Columbia"},
{"FM"," Federated States of Micronesia"},
{"MH"," Marshall Islands"},
{"MP"," Northern Mariana Islands"},
{"PW"," Palau"},
{"PR"," Puerto Rico"},
{"VI"," Virgin Islands"},
{"GU"," Guam"}
};
return html.DropDownListFor(expression, new SelectList(stateList, "key", "value"));
}
Run Code Online (Sandbox Code Playgroud)
我修改了上面的代码,使用字典来表示状态缩写.
只是不要忘记System.Web.Mvc.Html
在你的扩展方法类的顶部引用,就像我忘记了,噢!
Dar*_*rov 70
要在Razor视图中使用自定义帮助器方法,您需要将其纳入范围.有两种可能的方法:
@using SomeNamespace
在视图顶部添加一个名称空间,其中定义了包含帮助程序的静态类在~/Views/web.config
,添加:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="SomeNamspace" />
</namespaces>
</pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)将自定义帮助器放入视图中的范围后,Intellisense应该能够选择它并且您可以使用它:
@Html.StateDropDownList()
Run Code Online (Sandbox Code Playgroud)
现在你帮助方法需要做一些有用的事情.你可以调用现有的助手:
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownList(this HtmlHelper html)
{
return html.TextBox("foo")
}
}
Run Code Online (Sandbox Code Playgroud)
或者返回一些自定义数据:
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownList(this HtmlHelper html)
{
return MvcHtmlString.Create("Hello world");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您有强类型视图并且想要使用表达式:
using System.Web.Mvc;
using System.Web.Mvc.Html;
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownList(
this HtmlHelper<MyViewModel> html
)
{
var stateList = new SelectList(new[]
{
new { Key = "Alabama", Value = "Alabama" },
new { Key = "Idaho", Value = "Idaho" },
new { Key = "California", Value = "California" }
}, "Key", "Value");
return Html.DropDownListFor(
x => x.State, stateList, "-- Select a state --"
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
@Html.StateDropDownList()
Run Code Online (Sandbox Code Playgroud)
using System.Web.Mvc.Html;
public static MvcHtmlString StateDropDownList<TModel, TValue>( this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression ) {
return html.DropDownListFor( expression, _stateList );
}
Run Code Online (Sandbox Code Playgroud)
会工作._stateList
是一个IEnumerable<SelectListItem>
.
归档时间: |
|
查看次数: |
46828 次 |
最近记录: |