내 ASP.NET MVC보기에는 사용자를 다른 페이지로 리디렉션하는 조건문이 있습니다.보기 내부에서 새 URL로 리디렉션하는 가장 이상적인 방법은 무엇입니까?
가장 좋은 방법은 무엇입니까?
보기에 해당하는 Controller.RedirectToAction()
은 무엇입니까?
내 ASP.NET MVC보기에는 사용자를 다른 페이지로 리디렉션하는 조건문이 있습니다.보기 내부에서 새 URL로 리디렉션하는 가장 이상적인 방법은 무엇입니까?
가장 좋은 방법은 무엇입니까?
보기에 해당하는 Controller.RedirectToAction()
은 무엇입니까?
을이 MVC의 왜곡 같은 소리하고 컨트롤러의 리디렉션을 할 수 있다면, 당신의 논리가 아니다 옳은. '당신 때문이다 귀하의 코멘트에
는, 당신이 언급 한
<meta http-equiv="refresh" content='0;url=<%=Html.Action("MyAction","MyController") %>'>
업데이트 :
그러나, 여기에 내가 어떤 이유로 컨트롤러에 액세스하지 않은 경우 내가 사용하는 것 인 것이다 역할 검사를하고 모든 컨트롤러/작업에서이 작업을 수행하고 싶지는 않습니다. 그렇다면 여기에 고려해야 할 사항이 있습니다.
기본 컨트롤러 클래스를 만들고 모든 컨트롤러가이 클래스에서 확장되도록하십시오.
기본 컨트롤러에 OnActionExecuting 방법이 있습니다. 여기에 다음과 같은 내용이 있습니다.
public class MyBaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (/*the user is not in the role desired*/)
{
RedirectToRoute(filterContext, new { controller = "MyController", action = "MyAction"});
}
}
private void RedirectToRoute(ActionExecutingContext context, object routeValues)
{
var rc = new RequestContext(context.HttpContext, context.RouteData);
string url = RouteTable.Routes.GetVirtualPath(rc, new RouteValueDictionary(routeValues)).VirtualPath;
context.HttpContext.Response.Redirect(url, true);
}
}
가장 좋은 옵션은 조건부를 컨트롤러로 옮기고 리다이렉션을 수행하는 것입니다 (리디렉션 로직을 테스트하기 쉽습니다). 다른 방법으로는 조건과 같이 당신의보기의 서버 측과 자바 스크립트 문을 래핑 수 :
<% if (viewShouldRedirect) { %>
<script type="text/javascript">
window.location = "/Your/New/Url";
</script>
<% } %>
예. 사용자가 JS를 사용할 수 없도록 설정 한 경우 (NoScript 또는 wotnot), 작동하지 않습니다. –
+1 논리를 컨트롤러로 이동합니다. 리디렉션하려는 경우 브라우저에보기를 렌더링 할 이유가 없습니다. – tvanfosson
예 JS는 비행하지 않습니다. 그렇다면 그들이 여전히 들어갈 수 있기 때문에, 아이디어는 나의 마스터 페이지 내부에서 체크하는 역할입니다 ... 만약 내가 다른 곳에서한다면, 각 액션에 코드를 넣어야 할 것입니다. . 그리고 여기에서 모두에서 그것을하는 것을 기억하십시오, 은색 총알이 마스터 페이지로 수표/리다이렉션을 넣어서 희망하고 있었다. – BigOmega
그것은 역할을 검사하는 것입니다. 나는 마스터 페이지에서 그것을 할 수있을 때 모든 단일 액션에 코드를 넣고 싶지 않습니다. – BigOmega
좋습니다. 음, Html.Action을 표시하는 메타 태그를 업데이트했습니다. 이것은 필요한 모든 것을해야합니다. –
아 ~ 그래서 이것을 추가해야 할 것입니다.
보기에서 어디서든 할 수는 없습니까? 방법이 없니? 나는 HTML이 무엇인지, 감사하다고 생각한다. – BigOmega