এইচটিএমএল সহায়তায় URL তৈরি করুন


168

সাধারণত একটি এএসপি.এনইটি ভিউতে ইউআরএল (কোনও নয় <a>) পাওয়ার জন্য নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারে :

Url.Action("Action", "Controller");

তবে, কাস্টম এইচটিএমএল সহায়ক থেকে এটি কীভাবে করব তা আমি খুঁজে পাচ্ছি না। আমার আছে

public class MyCustomHelper
{
   public static string ExtensionMethod(this HtmlHelper helper)
   {
   }
}

সহায়ক ভেরিয়েবলের অ্যাকশন এবং জেনারেটলিঙ্ক পদ্ধতি রয়েছে তবে তারা এর উত্পন্ন করে <a>। আমি এএসপি.নেট এমভিসি উত্স কোডটিতে কিছু খনন করেছি, তবে আমি সরল কোনও উপায় খুঁজে পাইনি।

সমস্যাটি হ'ল উপরের ইউরালটি ভিউ ক্লাসের একজন সদস্য এবং এটির তাত্ক্ষণিকতার জন্য এটি কিছু প্রসঙ্গ এবং রুটের মানচিত্রের প্রয়োজন (যা আমি মোকাবেলা করতে চাই না এবং আমার কোনওভাবেই ভাবার কথা নয়)। বিকল্পভাবে, এইচটিএমএলহেল্পার শ্রেণীর উদাহরণটিরও কিছু প্রসঙ্গ রয়েছে যা আমি ধরে নিই যে তা হয় ইউরাল উদাহরণের প্রসঙ্গ তথ্যটির সাবসেটের সরবরাহকারী (তবে আবার আমি এটির সাথে কাজ করতে চাই না)।

সংক্ষেপে, আমি এটি সম্ভব বলে মনে করি কিন্তু যেহেতু আমি যে সমস্ত উপায়ে দেখতে পাচ্ছিলাম, যেহেতু আরও কম বা কম অভ্যন্তরীণ এএসপি.নেট স্টাফের সাথে কিছুটা কারসাজি জড়িত, আমি আরও অবাক হই যে আরও ভাল উপায় আছে কিনা wonder

সম্পাদনা করুন: উদাহরণস্বরূপ, আমি দেখতে পাচ্ছি একটি সম্ভাবনা হ'ল:

public class MyCustomHelper
{
    public static string ExtensionMethod(this HtmlHelper helper)
    {
        UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
        urlHelper.Action("Action", "Controller");
    }
}

তবে এটি ঠিক মনে হচ্ছে না। আমি নিজেই আরলহেল্পারের উদাহরণগুলির সাথে কাজ করতে চাই না। একটি সহজ উপায় থাকতে হবে।


3
আমি বুঝতে পারি এটি একটি সরল উদাহরণ, তবে দেখানো উদাহরণের জন্য আমি এইচটিএমএলহেল্পারের পরিবর্তে আরলহেল্পার প্রসারিত করব। যদিও আপনার আসল কোডের জন্য উভয়ের প্রয়োজন হতে পারে।
ক্রেগ স্টান্টজ

দুঃখিত, আমার আরও পরিষ্কার হওয়া উচিত ছিল: আমি এক্সটেনশন পদ্ধতিতে কিছু HTML উপস্থাপনা করতে চেয়েছিলাম এবং এর জন্য আমার ইউআরএল জেনারেট করা দরকার।
জান জিচ

উত্তর:


217

আপনি এইচটিএমএল সহায়তা সহায়ক সম্প্রসারণ পদ্ধতির অভ্যন্তরে ইউআরএল সহায়ক তৈরি করতে পারেন:

var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var url = urlHelper.Action("Home", "Index")

2
আমি মনে করি যে কনস্ট্রাক্টরও new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
রুট

22

আপনি UrlHelperপাবলিক এবং স্ট্যাটিক ক্লাস ব্যবহার করে লিঙ্কগুলি পেতে পারেন :

UrlHelper.GenerateUrl(null, actionName, controllerName, null, null, null, routeValues, htmlHelper.RouteCollection, htmlHelper.ViewContext.RequestContext, true)

এই উদাহরণে আপনাকে নতুন আরলহেল্পার ক্লাস তৈরি করতে হবে না যা একটু সুবিধা হতে পারে।


আমি এই উত্তরটি বেশি পছন্দ করি কারণ রুট কালেকশন সেট করে।
কেপুল 1

10

এখানে পাবার জন্য আমার ক্ষুদ্র extenstion পদ্ধতি UrlHelperএকটি এর HtmlHelperউদাহরণ হিসেবে বলা যায়:

  public static partial class UrlHelperExtensions
    {
        /// <summary>
        /// Gets UrlHelper for the HtmlHelper.
        /// </summary>
        /// <param name="htmlHelper">The HTML helper.</param>
        /// <returns></returns>
        public static UrlHelper UrlHelper(this HtmlHelper htmlHelper)
        {
            if (htmlHelper.ViewContext.Controller is Controller)
                return ((Controller)htmlHelper.ViewContext.Controller).Url;

            const string itemKey = "HtmlHelper_UrlHelper";

            if (htmlHelper.ViewContext.HttpContext.Items[itemKey] == null)
                htmlHelper.ViewContext.HttpContext.Items[itemKey] = new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection);

            return (UrlHelper)htmlHelper.ViewContext.HttpContext.Items[itemKey];
        }
    }

এটি হিসাবে ব্যবহার করুন:

public static MvcHtmlString RenderManagePrintLink(this HtmlHelper helper, )
{    
    var url = htmlHelper.UrlHelper().RouteUrl('routeName');
    //...
}

(আমি কেবল রেফারেন্সের জন্য এই উত্তরগুলি পোস্ট করছি)


দুর্দান্ত পদ্ধতির কারণ এটি একটি নতুন তৈরির পরিবর্তে একটি বিদ্যমান অবজেক্টটিকে পুনরায় ব্যবহার করে।
মাইক

আমরা এএসপি.এনইটি 4.5 ব্যবহার করছি এবং পুনরায় প্রবেশের সমস্যাগুলি ভোগ করছিলাম। আমরা বিশ্বাস করি না যে ইউআরএলহেল্পার http অনুরোধগুলি জুড়ে পুনরায় ব্যবহারযোগ্য। দয়া করে নোটিশ নিন।
'টি ভেল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.