asp.net mvc html.actionLink () 원하지 않는 경로 값 유지
-
13-09-2019 - |
문제
내 견해에 다음과 같은 액션 링크가 있습니다
<%= Html.ActionLink("LinkText", "Action", "Controller"); %>
다음 URL을 만듭니다 http://mywebsite.com/controller/action
마찬가지로 끝에 ID를 추가한다고 가정 해 봅시다. http://mywebsite.com/controller/action/53 페이지로 이동하십시오. 이 페이지에는 위에 지정한 마크 업이 있습니다. 이제 URL을 보면 다음과 같이 보입니다.
http://mywebsite.com/controller/action/53 (신분증 추가)
하지만 나는 그것이 ID를 제거하고 원래 그랬던 것처럼 보이고 싶다. http://mywebsite.com/controller/action (여기에 신분증이 없음)
내가 이것을 어떻게 고칠 수 있는지 아이디어가 있습니까? 컨트롤러/작업이 변경 될 수 있으므로 하드 코딩 된 URL을 사용하고 싶지 않습니다.
해결책
해결책은 내 자신의 경로 값을 지정하는 것입니다 (아래 세 번째 매개 변수)
<%= Html.ActionLink("LinkText", "Action", "Controller",
new { id=string.Empty }, null) %>
다른 팁
두 번째 "조치 전용"경로를 등록하고 html.routelink ()를 사용해야하는 것 같습니다. 먼저 응용 프로그램에서 이와 같은 경로를 등록하십시오.
routes.MapRoute("ActionOnly", "{controller}/{action}",
new { controller = "Home", action = "Index" } );
그런 다음 ActionLink 대신 해당 링크를 작성합니다.
Html.RouteLink("About","ActionOnly")
문제는 현재 진행중인 URL에서 내장 된 메소드와 제공되는 내용의 입력이 내장 된 것입니다. 당신은 이것을 시도 할 수 있습니다 :
<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>
ID 매개 변수를 수동으로 닦아야합니다.
이유를 모르지만 나에게는 효과가 없었습니다 (아마도 MVC2 RC 때문에). 생성 된 urlHelper 메소드 =>
public static string
WithoutRouteValues(this UrlHelper helper, ActionResult action,params string[] routeValues)
{
var rv = helper.RequestContext.RouteData.Values;
var ignoredValues = rv.Where(x=>routeValues.Any(z => z == x.Key)).ToList();
foreach (var ignoredValue in ignoredValues)
rv.Remove(ignoredValue.Key);
var res = helper.Action(action);
foreach (var ignoredValue in ignoredValues)
rv.Add(ignoredValue.Key, ignoredValue.Value);
return res;
}
어떤 값을 명시 적으로 재정의 해야하는지 모르거나 추가 매개 변수 목록을 피하려면 아래와 같은 확장 방법을 사용할 수 있습니다.
<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>
구현 세부 사항은 다음과 같습니다 이 블로그 게시물에서
조치 이름을 "action/"로 명시 적으로 설정했습니다. 해킹처럼 보이지만 빠른 수정입니다.
@Html.ActionLink("Link Name", "Action/", "Controller")
또 다른 방법은 ActionLink (htmlHelper, String, String, RoutEvaluedictionary) 과부하를 사용하는 것입니다. 그러면 마지막 매개 변수에 null을 넣을 필요가 없습니다.
<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
HTML.ActionLink의 오버로드는 이후 버전의 MVC에서 변경됩니다. MVC 5 이상. 이것이 다음을 수행하는 방법입니다.
@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)
참고 ID 매개 변수의 경우 "" ", Htmlattributes의 경우 NULL을 전달했습니다.
동적이 되려면 메뉴 링크가 필요했습니다. 모든 페이지마다 많은 추가 코드와 라우팅을 구현하는 대신 간단한 HTML 도우미를 분배했습니다.
<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>