2009-06-17 4 views
0

데이터베이스에서 구동되는 일부 하이퍼 링크를 즉시 생성하려고합니다. 그래서 예를 들어 프로젝트에 대한 정보를 얻은 다음 해당 DB 테이블의 구성 정보 (생성 할 HTML 필드 유형과 같은 정보가 들어 있음)를 기반으로 MVC에서 만든 사용자 정의 컨트롤에서 HTML 컨트롤을 동적으로 생성합니다 .도우미를 사용하지 않고 작업을 지정하는 방법

이것은 하이퍼 링크를 생각하게합니다. 특정 제품에 대한 하이퍼 링크를 동적으로 생성해야만하는 경우 뷰의 제품 아래에있는 사용자 정의 컨트롤로 동적으로 생성 된 양식이 이제는 간단하게 생성됩니다. Helper 메소드를 사용하지 않을 때 컨트롤러에 대한 컨트롤러/액션을 지정하려면 어떻게해야합니까? (뷰에 동적으로 필드를 만들므로) Html과 같은 것을 사용하거나 보이지 않게 할 수 있습니다. 필드가 런타임에 동적으로 생성되기 때문에 Actionlink? 내가 사용했던

+0

여기에 동적으로 생성 된 뷰 코드를 게시 할 수 있습니까? –

+0

아직 양식을 생성하는 동적 부분을 코딩하지 않았습니다. – PositiveGuy

+0

그게 내가 내 머리에 맞고있어, 내 사용자 정의 컨트롤에서 HTML 헬퍼를 사용하지 않고 TagBuilder를 사용하지만 지금은 내가 컨트롤러/동작을 직선으로 동적으로 가리키는 하이퍼 링크를 어떻게 만들지 알아 내려고 노력하고있다. 똑바로 을 사용하여 동적으로 생성 된 Html.ActionLink 대신 동적으로 렌더링 할 수없는 HTML 마크 업과이 하이퍼 링크를 사용자 정의 컨트롤에서보기로 동적으로 렌더링 할 때 아무런 이유가 없습니다. . – PositiveGuy

답변

0

하나의 솔루션 당신이 다음 도우미 메서드에 전달할 수있는 모든 정보가 들어있는 래퍼 클래스 만드는 것입니다 :

public class RouteWrapper 
{ 
    public string RouteName { get; set; } 
    public object RouteValues { get; set; } 
    public string LinkText { get; set; } 
    /* Other Properties pertaining to your data */ 
} 

을 당신이 RouteName을 정의하는 방법이있을 것 래퍼 내를, 및 RouteValues ​​속성 컨트롤러와 액션을 다르게 설정해야한다면, 그렇게 설정할 수 있습니다. RouteValues에 컨트롤러와 동작을 전달하고 RouteName으로 "Default"를 지정할 수도 있습니다.

그러면 정말 당신이보기에 straigt를 필요로 무엇을 할 수있을 것이라고합니다 (RouteWrapper 클래스를 가정 모델입니다, 구문은 약간 떨어져있을 수 있지만, 당신은 아이디어가 생각 날 것이다) :

<%= Html.RouteLink(Model.LinkText, Model.RouteName, Model.RouteValues) %> 

희망 이것은 도움이됩니다.

편집 :

그냥 다시 읽고 너를 도우미를 사용하지 않는 것을 보았습니다.

앵커 태그를 생성 할 때마다 내부 HTML에 LinkText 속성을 사용할 수 있으며 경로 이름과 경로 값을 기반으로 URL을 생성하는 데 도움이되는 Routing 클래스에 메서드가 있습니다. 일단 코드가 어떻게 될지 알아 내면 약간의 코드를 게시 할 것입니다. 다시

편집 : 나는 시도 할 것이다 무엇

public string GenerateAnchorTag(ViewContext context, RouteWrapper model) 
{ 
    string url = RouteTable.Routes.GetVirtualPath(context, model.RouteName, new RouteValueDictionary(model.RouteValues)); 
    return String.Format("<a href=\"{0}\">{1}</a>", url, model.LinkText); 
} 

가 (당신이 System.Web.Routing 어쩌면을 포함해야합니다

확인, 그래서 이것은 앵커 태그를 생성하는 일반적인 방법이 될 것입니다 System.Web.Mvc). 컨텍스트의 경우 요청 컨텍스트를 어떻게 든 잡아야합니다. 헬퍼 변수가 이미 전달할 수있는 컨텍스트를 가지고 있으므로 헬퍼 확장에서이 작업을 수행하고 있습니다. 헬퍼를 사용하지 않는다면 메소드에 RequestContext를 전달하는 가장 좋은 방법을 찾아야 할 것입니다.

관련 문제