2009-10-26 4 views
16

ASP.NET MVC에서 HTML 링크 목록을 렌더링하고 싶습니다. 링크는 절대적이며 설계중인 웹 사이트에 외부입니다. 다음 코드가 작동합니다.Asp.Net MVC 루프에서 일반 HTML 링크를 렌더링하는 방법은 무엇입니까?

<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
      <%= Html.Encode(item.Id) %> 
     </td> 
     <td> 
      <%= String.Format("<a href=\"{0}\">link</a>", item.Url) %> 
     </td> 
    </tr> 

<% } %> 

그러나 이것이 실제로 올바른 방법인지 궁금합니다. 여기에 MVC 컨트롤이 없습니까?

답변

15

는 Html 헬퍼에 확장 방법을 만드는 것입니다 :

public static class HtmlHelpers 
    { 

     public static string SimpleLink(this HtmlHelper html, string url, string text) 
     { 
      return String.Format("<a href=\"{0}\">{1}</a>", url, text); 
     } 

    } 

는 다음과 같이 사용할 수 있습니다 :

<tr> 
     <td> 
      <%= Html.Encode(item.Id) %> 
     </td> 
     <td> 
      <%= Html.SimpleLink(item.Url,item.Text) %> 
     </td> 
    </tr> 

[편집] 내가 추가하는 것을 잊었다. 응용 프로그램 전체에서이 Html 헬퍼 확장기를 사용하려면 당신은 웹 설정 파일에 다음을 추가해야

<system.web> 
     <pages> 
     <namespaces> 
      <!-- leave rest as-is --> 
      <add namespace="theNamespaceWhereHtmlHelpersClassIs"/> 
     </namespaces> 
     </pages> 
    </system.web> 
+3

이렇게하면 url과 text 모두에 HTML을 삽입 할 수 있습니다. TagBuilder를 사용하거나 적어도 url을 인코딩하고 XML을 텍스트로 인코딩하는 것을 기억하십시오. – DamienG

+0

실제로 DamienG, tnx. –

+0

도움이되었습니다. 나는 또한이 [weblog] (http://weblogs.asp.net/jgalloway/archive/2011/03/23/comparing-mvc-3-helpers-using-extension-methods-and-declarative-razor-helper)를 발견했다. aspx) 기사에서 Razor 구문을 사용하고 재사용 가능한 라이브러리를 만드는 방법을 보여주는 동일한 기사를 설명합니다. – nwayve

2

나는 그것이 좋다고 생각한다. 간단한 foreach는 MVC에서 repeater 역할을 수행합니다.

3

차라리

<td><a href="<%= item.Url %>">link</a></td> 

나에게 다소 "청소기"보인다 사용합니다,하지만 난 당신의 접근 방식은 단지 좋은 생각합니다. 당신은 좋은 방법이지만 아무것도 누락되지 않습니다

26

내가 태그 빌더 클래스를 사용하여, 그것에게 MVC 프레임 워크는 그것을 수행하는 방법을 구현하는 것을 좋아합니다. 나는 htmlAttributes 매개 변수를 통해 전달할 수있는이 방법은 클래스 또는 다른 속성 같은 것들을 추가 :

public static MvcHtmlString HtmlLink(this HtmlHelper html, string url, string text, object htmlAttributes) 
{ 
TagBuilder tb = new TagBuilder("a"); 
tb.InnerHtml = text; 
tb.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 
tb.MergeAttribute("href", url); 
return MvcHtmlString.Create(tb.ToString(TagRenderMode.Normal)); 
} 

그냥 링크를 생성하는 잔인한 사람처럼 보일 수 있습니다,하지만 당신은 문자열 형식의 패턴에 대한 추문 필요가 없습니다 의미 링크에 추가 HTML 속성을 삽입하는 방법

3

Orchard 프로젝트에는 링크 작성 도구가있는 HtmlHelper 확장 클래스가 있습니다.

참조 : HtmlHelperExtensions.Link()

http://orchard.codeplex.com/SourceControl/changeset/view/dbec3d05e6d1#src%2fOrchard%2fMvc%2fHtml%2fHtmlHelperExtensions.cs

다음 사용 할 수 있습니다 : 위의 링크가 더 이상 유효하지 않습니다

<li>@Html.Link(Model.Path, Model.Title)</li> 

업데이트을하지만, 소스를 다운로드하는 경우, Links에 대한 5 가지 오버로드가있는 HtmlHelperExtensions가 있습니다. 그 중 하나는 다음과 같습니다.

public static IHtmlString Link(this HtmlHelper htmlHelper, string linkContents, string href, IDictionary<string, object> htmlAttributes) { 
     var tagBuilder = new TagBuilder("a") { InnerHtml = htmlHelper.Encode(linkContents) }; 
     tagBuilder.MergeAttributes(htmlAttributes); 
     tagBuilder.MergeAttribute("href", href); 
     return new HtmlString(tagBuilder.ToString(TagRenderMode.Normal)); 
    } 
1

Html 인코딩을 피하려면 @ Html.Raw (url)을 사용하십시오.

관련 문제