2009-05-18 8 views
11

मेरे पास खोज परिणामों को सूचीबद्ध करने वाले कई पृष्ठ हैं, प्रत्येक परिणाम के लिए मैं प्रदर्शित करना चाहता हूं कि मैं डिस्प्ले कोड डुप्लिकेट करने से बचने के लिए एक कस्टम व्यू हेल्पर बनाना चाहता हूं।कस्टम सहायक से एएसपी.नेट एमवीसी एचटीएमएल हेल्पर्स का उपयोग कैसे करें?

मैं अपने कस्टम व्यू हेल्पर से सुविधाजनक मौजूदा व्यू हेल्पर्स तक कैसे पहुंचूं? अर्थात। मेरे कस्टम व्यू हेल्पर में मैं Url.Action(), Html.ActionLink, आदि का उपयोग करना चाहता हूं। मैं अपने कस्टम व्यू हेल्पर से उन्हें कैसे एक्सेस करूं?

using System; 
namespace MvcApp.Helpers 
{ 
    public class SearchResultHelper 
    { 
     public static string Show(Result result) 
     { 
      string str = ""; 

      // producing HTML for search result here 

      // instead of writing 
      str += String.Format("<a href=\"/showresult/{0}\">{1}</a>", result.id, result.title); 
      // I would like to use Url.Action, Html.ActionLink, etc. How? 

      return str; 
     } 
    } 
} 

using System.Web.MvcHtmlHelpers लिए पहुँच देता है, लेकिन ActionLink तरह सुविधाजनक विधियों में से किसी गैर उपस्थित होने लगते हैं।

उत्तर

8

इस उदाहरण में आपकी मदद करनी चाहिए। यह सहायक अलग-अलग लिंक टेक्स्ट प्रस्तुत करता है कि उपयोगकर्ता लॉग इन है या नहीं।

public static string FooterEditLink(this HtmlHelper helper, 
     System.Security.Principal.IIdentity user, string loginText, string logoutText) 
    { 
     if (user.IsAuthenticated) 
      return System.Web.Mvc.Html.LinkExtensions.ActionLink(helper, logoutText, "Logout", "Account", 
       new { returnurl = helper.ViewContext.HttpContext.Request.Url.AbsolutePath }, null); 
     else 
      return System.Web.Mvc.Html.LinkExtensions.ActionLink(helper, loginText, "Login", "Account", 
       new { returnurl = helper.ViewContext.HttpContext.Request.Url.AbsolutePath }, null); 
    } 

संपादित करें:: यह अपने कस्टम सहायक अंदर ActionLink के उपयोग को दर्शाता है
तुम सब this UrlHelper urlHelp और फिर बस की तरह कुछ के साथ this HtmlHelper helper परम को बदलने के लिए Url.Action() विधि का उपयोग करने के लिए क्या करने की जरूरत होगी कॉल urlHelp.Action(...

आशा है कि इससे मदद मिलती है।

-1

मेरी राय में, आपको कोड के भीतर एक्शनलिंक का उपयोग करने की कोशिश नहीं करनी चाहिए। एमवीसी की पूरी अवधारणा तर्क से तर्क को अलग करना है, इसलिए आपको इसके साथ रहना चाहिए।

मैं सुझाव दूंगा कि आप व्यू ऑब्जेक्ट को व्यू (शायद व्यूडाटा के माध्यम से) पास कर दें और फिर परिणाम के भीतर परिणाम इनलाइन को पार्स करें। जैसे

<%= Html.ActionLink(result.title,"/showresult/" + result.id, "myController") %> 
+1

मैं आपका पॉइंट देखता हूं और सहमत हूं। हालांकि, इसका मतलब यह होगा कि मुझे कई स्थानों पर पार्स/डिस्प्ले कोड/तर्क को डुप्लिकेट करने की आवश्यकता है, जो मैं टालने का प्रयास करता हूं। – stpe

+1

कोई अच्छा कारण नहीं है कि एक HTML सहायक दूसरे को क्यों कॉल नहीं कर सकता है। –

1

एक साधारण gravatar एचटीएमएल helpler, अपने वर्ग भी स्थिर होने की जरूरत है।

public static string GetGravatarURL(this HtmlHelper helper, string email, string size, string defaultImagePath) 
    { 

     return GetGravatarURL(email, size) + string.Format("&default={0}", defaultImagePath); 

    } 
0

तुम सिर्फ एक विस्तार विधि के साथ डिफ़ॉल्ट HtmlHelper और UrlHelper विस्तार कर सकते हैं (ताकि आप अपने विधि में पहली परम रूप xxxHelper है)।

या आप बस अपनी इच्छित विधि के साथ अपना मूल दृश्य बना सकते हैं और दृश्य के एचटीएमएल या यूआरएल चर का उपयोग कर सकते हैं।

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

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