ASP에서 사용자 고유의 HtmlHelper를 추가합니다.NET MVC 3
저는 MVC가 처음이고 면도기 보기에서 사용 가능한 html 도움말에 추가할 수 있도록 저만의 확장 방법을 만들려고 합니다.Html.DropDownListFor()모델에 있는 모든 속성에 대한 드롭다운 목록을 만들 수 있습니다.라는 도우미를 만들고 싶습니다.Html.StateDropDownListFor()미국의 50개 주를 제외하고는 똑같은 일을 합니다.이렇게 하면 작성하는 모든 상태 드롭다운에 대해 SelectList를 작성할 필요가 없습니다.이것을 하는 가장 쉬운 방법은 무엇입니까?지금은 이것이 있습니다.
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownList(this HtmlHelper html)
{
// ???
}
}
제가 친하긴 하나요?전체 텍스트 상자 도우미를 재구축하는 것이 아니라 기존 텍스트 상자 도우미를 활용하는 도우미를 생성하고 SelectList를 대신합니다.내가 보기엔 그렇게 할 수 있을 것 같아요Html.StateDropDownList(x => x.State)
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>
사용자 지정 도우미가 보기 범위에 포함되면 Intelliense에서 해당 도우미를 선택할 수 있으며 다음을 사용할 수 있습니다.
@Html.StateDropDownList()
이제 도우미 방법은 유용한 일을 해야 합니다.기존 도우미를 호출할 수 있습니다.
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownList(this HtmlHelper html)
{
return html.TextBox("foo")
}
}
또는 사용자 지정 데이터를 반환합니다.
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownList(this HtmlHelper html)
{
return MvcHtmlString.Create("Hello world");
}
}
강력하게 입력된 보기가 있고 식을 사용하고자 하는 경우:
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 --"
);
}
}
그 다음:
@Html.StateDropDownList()
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 );
}
될 겁니다._stateList가 되는 것IEnumerable<SelectListItem>.
(질문 작성자를 대신하여 답변을 게시하여 답변 섹션으로 이동합니다.
정답은 이렇습니다.
다른 사람이 사용할 경우를 대비해 완성된 확장 방법을 소개합니다.
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"));
}
위의 코드를 상태 축약에 사전을 사용하기 위해 수정했습니다.
꼭 참고하시기 바랍니다.System.Web.Mvc.Html내가 잊었던 것처럼 당신의 확장 방법 수업의 맨 위에 있습니다.
언급URL : https://stackoverflow.com/questions/5052752/adding-your-own-htmlhelper-in-asp-net-mvc-3
'programing' 카테고리의 다른 글
| PHP mariaDB 데이터베이스의 토큰 업데이트 (0) | 2023.09.15 |
|---|---|
| 클릭 시 포커스 어라운드 버튼을 제거하는 방법 (0) | 2023.09.15 |
| IntelliJ: 로컬과 깃 커밋/브랜치 간의 변경된 모든 파일의 차이 보기 (0) | 2023.09.15 |
| 기본적으로 혼합 이진 로그 (0) | 2023.09.15 |
| 도커 오류: 장치에 공간이 남아 있지 않습니다. (0) | 2023.09.15 |