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 |