2009-07-24 24 views
5

के लिए कस्टम एचटीएमएल हेल्पर बनाने में मदद की ज़रूरत है मैं कुछ कस्टम एचटीएमएल हेल्पर्स के साथ खेल रहा हूं और अब मैं एक ऐसा करने की कोशिश कर रहा हूं जिसे मैं jquery AJAX UI टैब के लिए उपयोग कर सकता हूं।एएसपीनेट एमवीसी

तो ajax टैब करने के लिए आप अपने एचटीएमएल कोड

<div id="example"> 
    <ul> 
     <li><a href="ahah_1.html"><span>Content 1</span></a></li> 
     <li><a href="ahah_2.html"><span>Content 2</span></a></li> 
     <li><a href="ahah_3.html"><span>Content 3</span></a></li> 
    </ul> 
</div> 

तो मैं ActionLink उपयोग नहीं कर सकते में इस प्रारूप है क्योंकि मुझे लगता है मैं वैसे भी actionLink को टैग जोड़ सकते हैं नहीं लगता है की जरूरत है।

तो मैं अपना खुद का एचटीएमएल सहायक बनाना चाहता हूं जिसमें एक स्पैन टैग के साथ एक एक्शनलिंक है और इसके बाद संभवतः इसे बिना किसी सूचीबद्ध सूचीबद्ध टैग के लिए बनाया जाए।

इसलिए मुझे यकीन नहीं है कि मेरे लाभ के लिए एक्शनलिंक का उपयोग कैसे करें। एक्शनलिंक की तरह 10 ओवरलोडेड विधियों की तरह है और मैं उन सभी 10 को फिर से बनाना नहीं चाहता क्योंकि यह केवल व्यर्थ लगता है। तो क्या मैं इसे संदर्भित कर सकता हूं या ऐसा कुछ कर सकता हूं?

मैं ऐसे तरीके का उपयोग कर रहा हूं जो मेरे कस्टम एचटीएमएल हेल्पर्स को "एचटीएमएल" करते समय दिखाने की अनुमति देता है। इंटेलिजेंस में

उदाहरण के लिए मैं होगा:

public static string Button(this HtmlHelper helper, string id, string value) 

तो मुझे यकीन है कि कैसे इस HtmlHelper मैं गुजर रहा हूँ का उपयोग करने के लिए नहीं कर रहा हूँ

मैं भी की लाइन के इस हिस्से को नहीं समझते। कोड "यह एचटीएमएल हेल्पर सहायक"।

पैरामीटर में कीवर्ड "यह" का उपयोग करने से मुझे क्या भ्रमित करता है। मुझे यकीन नहीं है कि यह क्या कर रहा है और आपको इसकी आवश्यकता क्यों है। मैं यह भी समझ नहीं पा रहा हूं कि इस पैरामीटर को कैसे पारित किया जा रहा है लेकिन इसका उपयोग नहीं करने से आपके ग्राहक एचटीएमएल हेल्पर्स को "एचटीएमएल" द्वारा accesed की अनुमति मिलती है।

धन्यवाद

उत्तर

8

Marc's answer उत्कृष्ट है।

1) अपने सहायक के साथ स्थिर कक्षा बनाएं:

public static class MyHtmlHelpers 
{ 
    public static string MySpecialActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues) 
    { 
     var innerTagBuilder = new TagBuilder("span") { 
      InnerHtml = (!String.IsNullOrEmpty(linkText)) ? HttpUtility.HtmlEncode(linkText) : String.Empty 
     }; 

     TagBuilder tagBuilder = new TagBuilder("a") { 
      InnerHtml = innerTagBuilder.ToString(TagRenderMode.Normal); 
     }; 

     var urlHelper = new UrlHelper(html.ViewContext.RequestContext); 
     var url = urlHelper.Action(actionName, routeValues); 
     tagBuilder.MergeAttribute("href", url); 

     return tagBuilder.ToString(TagRenderMode.Normal); 
    } 
} 

2) web.config को MyHtmlHelpers वर्ग के नाम स्थान जोड़ें:

<pages> 
    <namespaces> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" /> 
    <add namespace="System.Linq" /> 
    <add namespace="System.Collections.Generic" /> 

    <add namespace="MyHtmlHelpers_Namespace" /> 
    </namespaces> 
</pages> 

3 बस कुछ कोड जोड़ने) आनंद लें :):

<div id="example"> 
    <ul> 
     <li><%= Html.MySpecialActionLink("Content 1", "action1", null) %></li> 
     <li><%= Html.MySpecialActionLink("Content 2", "action2", new { param2 = "value2" }) %></li> 
     <li><%= Html.MySpecialActionLink("Content 3", "action3", new { param3 = "value3" }) %></li> 
    </ul> 
</div> 
+0

मैं जितनी जल्दी हो सके कोशिश करूँगा। तो मुझे लगता है कि एक्शनलिंक और 10 ओवरलोडेड विधियों का उपयोग करने का कोई आसान तरीका नहीं है? मुझे मूल रूप से तस्वीर बनाना है और मुझे क्या चाहिए? यह भी क्या करता है? इनर एचटीएमएल = (! स्ट्रिंग.आईएस नूलऑरफेक्टी (लिंकटेक्स्ट))? HttpUtility.HtmlEncode (linkText): स्ट्रिंग। लक्षण आप एचटीएमएल क्यों कर रहे हैं? मैं समझ सकता हूं कि आपकी जांच खाली क्यों है लेकिन यह सुनिश्चित नहीं है कि आपका एन्कोडिंग क्यों है। – chobo2

+0

लिंकटेक्स्ट सही मार्कअप और सुरक्षा कारणों के उत्पादन के लिए HTML एन्कोडेड होना चाहिए। एमएसडीएन से: यदि रिक्त स्थान और विराम चिह्न जैसे वर्ण HTTP स्ट्रीम में पास किए जाते हैं, तो उन्हें प्राप्त करने वाले अंत में गलत व्याख्या की जा सकती है। एचटीएमएल एन्कोडिंग उन पात्रों को परिवर्तित करता है जिन्हें HTML में वर्ण-इकाई समकक्षों में अनुमति नहीं है; –

3

this HtmlHelper helper यह HtmlHelper पर एक सी # 3.0 "विस्तार विधि" है, जो है कि यह कैसे आपके विचार (आदि) में Html उदाहरण पर उपलब्ध हो जाता है का मतलब है। एक विस्तार विधि एक स्थिर विधि है जो (संकलन समय पर) this द्वारा नामित प्रकार पर उपलब्ध एक उदाहरण विधि होने के लिए नाटक करती है (इस मामले में HtmlHelper)।

MyStaticClass.Button(Html, {args}); 

यह आवश्यकHtmlHelper कि में यदि आप इसे (inded की जरूरत नहीं है पारित हो जाता है का उपयोग करने के, मैं नहीं है: वास्तव में, संकलक स्थिर विधि (Html.Button({args})) के रूप में यद्यपि आप लिखकर कॉल इसका उपयोग न करें here); यह मुख्य काम है (इस मामले में) कोड को उपभोग करने के लिए सुविधाजनक बनाना है (एक विस्तार विधि के रूप में); लेकिन यह कुछ मामलों में उपयोगी हो सकता है।

1

आपके पास jQuery AJAX UI टैब के साथ काम करने वाले लिंक बनाने के लिए HtmlHelper नहीं है।

$("#example").tabs({ tabTemplate: "<li><a href=\"#{href}\">#{label}</a></li>" }); 

documentation देखें:

jQuery टैब प्लगइन एक तर्क है कि आप सेट कर सकते हैं tabTemplate नामित स्वीकार करता है।

+0

तो क्या मैं सिर्फ divs की एक सूची बना देता हूं और सभी herfs पर "#" डालता हूं? मुझे यकीन नहीं है कि कोड कैसा दिखना चाहिए। मैं एचटीएमएलहेल्पर का उपयोग करता हूं क्योंकि मुझे उन्हें बहुत साफ क्लीनर मिल जाता है और स्पेगेटी कोड को रोकता है, इसलिए मैं उनका उपयोग क्यों कर रहा हूं। मैं अभी भी जानना चाहता हूं कि एक कस्टम एचटीएमएल सहायक में एक निर्मित एचटीएमएल सहायक कैसे कॉल करें। – chobo2

+0

लिंक किए गए दस्तावेज से: टैब टेम्पलेट: HTML टेम्पलेट जिसमें से एक नया टैब बनाया और जोड़ा गया है। प्लेसहोल्डर # {href} और # {लेबल} को यूआरएल और टैब लेबल के साथ प्रतिस्थापित किया गया है जो ऐड विधि के लिए तर्क के रूप में पारित किए जाते हैं। – andymeadows

+0

@ chobo2 - andymeadows सही है। अपने टैब को किसी भी तरह से बनाएं और अपने द्वारा बनाए गए लिंक (या किसी भी अन्य तत्व) से मेल खाने के लिए jQuery प्राप्त करने के लिए टैब टेम्पलेट विकल्प का उपयोग करें। –