아래와 같이 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

 

ASP.NET Core의 태그 도우미

태그 도우미란 무엇이며 ASP.NET Core에서 어떻게 사용하는지 알아봅니다.

docs.microsoft.com

 

 

만일 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?}");
  });
  ...
  ...
}

 

끝.

 

 



Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]