아래와 같이 Html Helper로 작성된 코드는
@using (Html.BeginForm("Index", "SomeController", new { area = "SomeArea" },
FormMethod.Get, null, new { id = "frmSearch" }))
{
@Html.DropDownListFor(x => x.SearchInfo.BldgId, Model.Bldgs, new {
@class = "input_select marR10", onchange = "onChangeBldgId();" })
@Html.TextBoxFor(x => x.SearchInfo.Keyword, new { @class = "txt marR5",
@placeholder = "건물명", onkeydown = "javascript:if (event.keyCode == 13) { onSearch(); return false;}" })
@Html.ActionLink("조회", "Index", "SomeController", new { area = "SomeArea" },
new { @class = "searchBtn search-Btn", onclick = "return onSearch();" })
@Html.ActionLink("추가", "Edit", "SomeController", new { isNew = true,
referrer = Context.Request.Path }, new { @class = "btnC" })
}
아래와 같은 Tag Helper 코드로 1:1 치환 가능하다.
@Html.*에 비해 훨씬 직관적이다. 가능하면 Tag Helper로 쓰는 것이 좋겠다.
<form asp-area="SomeArea" asp-controller="SomeController" asp-action="Index"
method="get" id="frmSearch">
<select asp-for="SearchInfo.BldgId" asp-items="Model.Bldgs"
class="input_select marR10" onchange="onChangeBldgId();"></select>
<input asp-for="SearchInfo.Keyword" class="txt marR5" placeholder="건물명"
onkeydown="javascript:if (event.keyCode == 13) { onSearch(); return false;}" />
<a asp-area="SomeArea" asp-controller="SomeController" asp-action="Index"
class="searchBtn search-Btn" onclick="return onSearch();">조회</a>
<a asp-controller="SomeController" asp-action="Edit" asp-route-isNew="@true"
asp-route-referrer="@Context.Request.Path" class="btnC">추가</a>
</form>
Tag Helper에 대한 상세한 설명은 아래 사이트를 참고하면 된다.
>> 참고: docs.microsoft.com/ko-kr/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-3.1
만일 Areas로 구분된 영역에 있는 View라고 해도 Area 라우팅 값(new { area = "SomeArea" } / asp-area="SomeArea")은 명시적으로 쓰지 않고 생략해도 된다. 단, 현재 요청 View와 일치하는 Controller가 존재해야 하고, Startup.cs에서 Area Routing이 먼저 정의되어야 한다. 즉, URL 정보만으로 찾을 수 있어야 한다.
아래와 같이...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider provider)
{
...
...
app.UseEndpoints(endpoints =>
{
// 순서가 중요함: Area 먼저! {area:exists} 쓰지 말 것!
endpoints.MapControllerRoute(
name: "SubAreas",
pattern: "{area}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
...
...
}
끝.
'Tech: > .NET·C#' 카테고리의 다른 글
Visual Studio 2019 ASP.NET Core 하위 호환성 문제 (0) | 2021.01.07 |
---|---|
Stream 사용 시 기본 유의사항을 또 까먹고... (0) | 2020.12.24 |
PushSharp: FCM/APNs Push 팁 (0) | 2019.05.17 |
VS2017 환경과 .NET Framework 4.7.1 타기팅 팩 (0) | 2019.05.10 |
web.config의 customErrors/httpErrors (0) | 2018.08.17 |