2011-09-07 3 views
4

Html.ActionLink를 래핑하고 특정 클래스 특성을 추가하는 간단한 도우미를 작성하려고합니다.HtmlAttributes를 Html.ActionLink (MVC3)에 병합하는 방법은 무엇입니까?

@helper MyActionLink(string text, string action, object routeValues, object htmlAttributes) 
    { 
    @Html.ActionLink(text, action, routeValues, new { @class = "MyClass" }) 
} 

그것은 실제로 속성 @class 필요한 추가하지만 모든 통과 htmlAttributes을 무시 : 순간에 그것은 것 같습니다. 그래서 경우가

처럼 사용
@MyActionLink("Item1", "Edit", new { itemId = 1 }, new { @class = "class1" }) 

<a class="MyClass" href="/Test/Edit?itemId=1">Item1</a> 

를 출력하지만 난 2 개 클래스가 갖고 싶어 : class="class1 MyClass"

가 어떻게 그 htmlAttributes을 병합 할 수 있습니까?

답변

8

는 hazzik의 대답보다

$("#linkID").html("<span class='ui-icon ui-icon-gear'/>"+$("#linkID").html()); 
+0

감사합니다! RouteValueDictionary의 ctor가 객체를 받아들이고 파싱한다는 사실을 알고 있습니다. – Shaddix

+1

방금 ​​원본을 보았고 변환에'HtmlHelper.AnonymousObjectToHtmlAttributes'를 사용하도록 권했습니다. 객체 속성 이름에서 일부 변환을 수행합니다 (예 :'_'를'-'로 바꾸기). – hazzik

1

이이 같은 JQuery와 스크립트 태그를 추가 간단하게 달성 할 수있다을 시도해보십시오

@helper MyActionLink(string text, string action, object routeValues, object htmlAttributes) 
{ 
    var htmlAttr = HtmlHelper.AnonymousObjectToHtmlAttributes(this.ViewData["htmlAttributes"]); 

    htmlAttr["class"] = ("MyClass " + htmlAttr["class"]).Trim(); 

    @Html.ActionLink(text, action, new RouteValueDictionary(routeValues), htmlAttr) 
} 
0

약간 간단,이 조각

@helper MyActionLink(string text, string action, object routeValues, object htmlAttributes) 
{ 
    var attributes = (IDictionary<string, object>) HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 
    object cssClass; 
    if(attributes.TryGetValue("class", out cssClass) == false) 
    { 
     cssClass = ""; 
    } 
    attributes["class"] = cssClass + " MyClass"; 

    @Html.ActionLink(text, action, new RouteValueDictionary(routeValues), attributes) 
} 
+0

this.ViewData [ "htmlAttributes" ])는 htmlAttributes 여야합니다. –

관련 문제