2011-12-15 15 views
7

मैं एक्शनलिंक के अंदर एक अवधि तत्व कैसे डाल सकता हूं लेकिन URL.ACTION के साथ नहीं?एक्शनलिंक एमवीसी 3 के अंदर अवधि तत्व कैसे डालें?

यह:

<li><span> 
    @Ajax.ActionLink("LinkText", "ControllerName", new AjaxOptions 
       { 
        UpdateTargetId = "div", 
        InsertionMode = InsertionMode.Replace, 
        HttpMethod = "GET", 
        LoadingElementId = "progress" 

       }) 
</span></li> 

इस उत्पन्न करता है:

<li> 
<span> 
<a href="/Home/ControllerName" data-ajax-update="#scroll" 
data-ajax-mode="replace" data-ajax-method="GET" 
data-ajax-loading="#progress" data-ajax="true">LinkText</a> 
</span> 
</li> 

लेकिन मैं कुछ और की जरूरत है।

<li> 
    <a href="/Home/ControllerName" data-ajax-update="#scroll" 
    data-ajax-mode="replace" data-ajax-method="GET" 
    data-ajax-loading="#progress" data-ajax="true"> 

    <span>LinkText</span> // this span generated inside <a> 

    </a> 
</li> 
+0

http://stackoverflow.com/questions/3470622/wrapping-an-element-with-html-actionlink – Ali

उत्तर

8

कैसे URL.ACTION साथ ActionLink अंदर स्पान तत्व डाल करने के लिए लेकिन इतने ही

सरल जवाब: मैं एक कस्टम MVC3 ActionLink विधि है कि इस उत्पादन उत्पन्न करता है बना सकते हैं कैसे आप नहीं कर सकते। एक्शनलिंक विधि एचटीएमएल लिंक टेक्स्ट को एन्कोड करता है और इसके बारे में आप इतना कुछ नहीं कर सकते हैं (आप माइक्रोसॉफ्ट में टिकट खोल सकते हैं ताकि वे एक अधिभार प्रदान कर सकें जो आपको एएसपी.नेट एमवीसी vNext में ऐसा करने की अनुमति देता है)।

आप एक कस्टम एचटीएमएल सहायक है कि सांकेतिक शब्दों में बदलना नहीं होगा लिख ​​सकता है फिलहाल:

public static class AjaxExtensions 
{ 
    public static IHtmlString MyActionLink(
     this AjaxHelper ajaxHelper, 
     string linkText, 
     string actionName, 
     AjaxOptions ajaxOptions 
    ) 
    { 
     var targetUrl = UrlHelper.GenerateUrl(null, actionName, null, null, ajaxHelper.RouteCollection, ajaxHelper.ViewContext.RequestContext, true); 
     return MvcHtmlString.Create(ajaxHelper.GenerateLink(linkText, targetUrl, ajaxOptions ?? new AjaxOptions(), null)); 
    } 

    private static string GenerateLink(
     this AjaxHelper ajaxHelper, 
     string linkText, 
     string targetUrl, 
     AjaxOptions ajaxOptions, 
     IDictionary<string, object> htmlAttributes 
    ) 
    { 
     var a = new TagBuilder("a") 
     { 
      InnerHtml = linkText 
     }; 
     a.MergeAttributes<string, object>(htmlAttributes); 
     a.MergeAttribute("href", targetUrl); 
     a.MergeAttributes<string, object>(ajaxOptions.ToUnobtrusiveHtmlAttributes()); 
     return a.ToString(TagRenderMode.Normal); 
    } 
} 

और उसके बाद:

@Ajax.MyActionLink(
    "<span>LinkText</span>", 
    "ActionName", 
    new AjaxOptions { 
     UpdateTargetId = "div", 
     InsertionMode = InsertionMode.Replace, 
     HttpMethod = "GET", 
     LoadingElementId = "progress" 
    } 
) 
+1

क्या आप इस कस्टम सहायकों का उदाहरण प्रदान कर सकते हैं? –

+0

@Ingol, निश्चित रूप से, मेरा अपडेट देखें। –

+1

धन्यवाद, यह करना चाहिए! –

2

मैं जानता हूँ कि इस पुरानी है, लेकिन मैं इस त्वरित और गंदी तरीके से उपयोग मेरे ग्रिड में स्टाइल बटन लिंक जोड़ने के लिए। आप रूट नाम/आदि शामिल करने के लिए ओवरलोड जोड़ सकते हैं। भी। उम्मीद है कि यह किसी की मदद करता है।

public static MvcHtmlString GridAnchor(this HtmlHelper html, string linkText, string actionName, string controllerName, 
      object routeValues, object htmlAttributes) 
     { 
      var result = new TagBuilder("a"); 
      var url = UrlHelper.GenerateUrl(null, actionName, controllerName, new RouteValueDictionary(routeValues), html.RouteCollection, 
              html.ViewContext.RequestContext, true); 
      result.Attributes.Add("href", url); 
      result.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 
      result.InnerHtml = "<span>" + linkText + "</span>"; 

      return MvcHtmlString.Create(result.ToString()); 
     } 
2

मैं संशोधित Darins का जवाब सिर्फ एक सा RouteValues ​​समायोजित करने के लिए सक्षम होने के लिए।

 

    public static class AjaxExtensions 
    { 
     public static IHtmlString MyActionLink(
      this AjaxHelper ajaxHelper, 
      string linkText, 
      string actionName, 
      AjaxOptions ajaxOptions 
     ) 
     { 
      var targetUrl = UrlHelper.GenerateUrl(null, actionName, null, null, ajaxHelper.RouteCollection, ajaxHelper.ViewContext.RequestContext, true); 
      return MvcHtmlString.Create(ajaxHelper.GenerateLink(linkText, targetUrl, ajaxOptions ?? new AjaxOptions(), null)); 
     } 

     public static IHtmlString MyActionLink(
      this AjaxHelper ajaxHelper, 
      string linkText, 
      string actionName, 
      object routeValues, 
      AjaxOptions ajaxOptions 
     ) 
     { 
      System.Web.Routing.RouteValueDictionary routeVals = new System.Web.Routing.RouteValueDictionary(routeValues); 

      var targetUrl = UrlHelper.GenerateUrl(null, actionName, null, routeVals, ajaxHelper.RouteCollection, ajaxHelper.ViewContext.RequestContext, true); 
      return MvcHtmlString.Create(ajaxHelper.GenerateLink(linkText, targetUrl, ajaxOptions ?? new AjaxOptions(), null)); 
     } 


     private static string GenerateLink(
      this AjaxHelper ajaxHelper, 
      string linkText, 
      string targetUrl, 
      AjaxOptions ajaxOptions, 
      IDictionary htmlAttributes 
     ) 
     { 
      var a = new TagBuilder("a") 
      { 
       InnerHtml = linkText 
      }; 
      a.MergeAttributes(htmlAttributes); 
      a.MergeAttribute("href", targetUrl); 
      a.MergeAttributes(ajaxOptions.ToUnobtrusiveHtmlAttributes()); 
      return a.ToString(TagRenderMode.Normal); 
     } 

    } 
 
0

JQuery का उपयोग करके इसे प्राप्त करना कितना मुश्किल है?

हम हमेशा JQuery का उपयोग कर सकते हैं और DOM लोड होने के बाद <span></span> जोड़ सकते हैं।

सही समाधान नहीं हो सकता है लेकिन डेवलपरों के लिए jquery का उपयोग कर रहे हैं और एचटीएमएल हेल्पर्स कक्षाएं ऊपर जवाब के रूप में लिखना नहीं चाहते हैं, यह काम हो सकता है।

1

मैं जानता हूँ कि यह एक पुरानी धागा है, लेकिन आप भी इनलाइन की तर्ज पर कुछ कर सकते हैं:

<li><span> 
@{ 
    var lnk = Ajax.ActionLink("LinkText", "ControllerName", new AjaxOptions { 
       UpdateTargetId = "div", 
       InsertionMode = InsertionMode.Replace, 
       HttpMethod = "GET", 
       LoadingElementId = "progress" 
      }); 
@Html.Raw(lnk.ToString().Replace(">LinkText<", "><span>LinkText</span><")); 
// Remember to include the open and closing >< ! 
} 
</span></li> 

यह एक हैक मुझे पता है, लेकिन आप आसानी से इन पंक्तियों के साथ एक विस्तार लिख सकता है

संबंधित मुद्दे