বিভিন্ন নিয়ামককে অ্যাকশন কল করতে এইচটিএমএল.অ্যাকশনলিঙ্ক ব্যবহার করে


224

আমি ব্যবহার করে নিয়ন্ত্রণকারীদের মধ্যে নেভিগেট করার চেষ্টা করছি ActionLink। আমি আমার সমস্যাটি একটি উদাহরণ দিয়ে বলব।

আমি হাট নিয়ন্ত্রকের সূচক দৃশ্যে আছি এবং আমি পণ্য নিয়ামকের বিশদ ক্রিয়াকলাপের লিঙ্ক তৈরি করতে নীচের কোডটি ব্যবহার করার চেষ্টা করছি।

<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }) %>

প্রোডাক্ট কন্ট্রোলারে বিশদে লিঙ্ক তৈরি করার পরিবর্তে এটি টুপি নিয়ন্ত্রকের অধীনে বিশদ ক্রিয়াকলাপের লিঙ্ক তৈরি করে এবং এর শেষে একটি দৈর্ঘ্য পরামিতি যুক্ত করে:

Hat/Details/9?Length=7

HTML.ActionLinkএই সমস্যার কারণে আমি নিয়ামকদের মধ্যে স্যুইচ করতে ব্যবহার করতে পারছি না । আমি কী ভুল করছি তা যদি আপনি আমাকে নির্দেশ করতে পারেন তবে আমি প্রশংসা করব। ধন্যবাদ

PS: আমি এমভিসির সাথে আসা ডিফল্ট রুট সেটিংটি ব্যবহার করছি

routes.MapRoute("Default", "{controller}/{action}/{id}", 
                     new { controller = "Home", action = "Index", id = "" } );

উত্তর:


409

আপনি যা চান তা এই ওভারলোড:

//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details", 
    "Product", new {id = item.ID}, null) %>

1
আপনি কেন ব্যাখ্যা করতে পারেন যে এই বিশেষ ওভারলোড কেন কাজ করে এবং কর্কি কাজ করে না? এইচটিএমএলএন্ট্রিবিউটগুলি কীভাবে বাতিল করতে লিঙ্কটির রাউটিংকে প্রভাবিত করে?
ডেরেক হুনজিকার

35
কারণ আপনি যদি অন্যান্য পরামিতি ব্যবহার করেন তবে এটি ধরে নেওয়া হয় যে তৃতীয় আর্গুমেন্টটি রুটভ্যালু এবং চতুর্থ আর্গুমেন্টটি htmlattributes। একটি 5 তম যুক্তি যুক্ত করার পদ্ধতিটিকে সঠিক ওভারলোডটি ব্যবহার করতে বাধ্য করে। ইন্টেলিজেন্সে ওভারলোডগুলির মাধ্যমে ঝাঁকুনি এবং এটি আরও অর্থবোধ তৈরি করবে।
ব্যানফোর্ড

2
অ্যাকশনলিঙ্কের ওভারলোড সত্যিই আনাড়ি। একটি রুটভ্যালু সংগ্রহের পরিবর্তে কোনও 'অবজেক্ট রুটভ্যালু' গ্রহণ করার পুরো বিষয়টি টাইপিংয়ের পরিমাণ হ্রাস করা। যাইহোক, আপনি একটি অতিরিক্ত নাল টাইপ করতে হবে। অ-স্বজ্ঞাত এবং পাল্টা উত্পাদনশীল ...
টিমোচ

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

1
ভবিষ্যতের পাঠকদের জন্য, আপনি যদি এই সমস্যাটিকে হিট করেন এবং আপনি সিএসএস শৈলী যুক্ত করার চেষ্টা করছেন তবে এটি সঠিক ওভারলোড। @ এইচটিএমএল.অ্যাকশনলিঙ্ক ("মাই টেক্সট", "মাইএকশন", "মাই কন্ট্রোলার", নাল, নতুন {@ ক্লাস = "মাই ক্লাস"})
গ্রানাডা কোডার

17

সেই পরামিতিগুলির সাহায্যে আপনি ভুল ওভারলোড হওয়া ফাংশন / পদ্ধতিটি ট্রিগার করছেন।

আমার জন্য কী কাজ করেছে:

<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }, null) %>

এটি HtmlHelper.ActionLink (স্ট্রিং লিঙ্কটেক্সট, স্ট্রিং অ্যাকশননাম, স্ট্রিং কন্ট্রোলারনাম, অবজেক্ট রুটভ্যালিউজ, অবজেক্ট এইচটিএমএল অবদান) ফায়ার করে

আমি এমভিসি 4 ব্যবহার করছি।

চীয়ারীত্ত!


2
আপনার কোডের লাইনটি আপনার উল্লিখিত ওভারলোডটিকে ট্রিগার করে না তবে এইচটিএমএল হেল্পার A অ্যাকশনলিঙ্ক (স্ট্রিং লিঙ্কটেক্সট, স্ট্রিং অ্যাকশননাম, অবজেক্ট রুটভ্যালুগুলি, অবজেক্ট এইচটিএমএলঅ্যাট্রিবিউটস)। এটি একই ফল দেয় যা ওপি এড়াতে চেষ্টা করেছিল। আপনাকে একটি অতিরিক্ত নাল প্যারামিটার যুক্ত করতে হবে।
টিমচচ

ধন্যবাদ টিমোচ, মিস করেছেন?
স্টিফান ভেন্টার

12

আমি নীচে পরিষ্কারতার স্বার্থে নামকরণের পরামিতিগুলি ব্যবহার করে এই সহায়তাকারীদের লেখার পরামর্শ দেব:

@Html.ActionLink(
    linkText: "Details",
    actionName: "Details",
    controllerName: "Product",
    routeValues: new {
        id = item.ID
    },
    htmlAttributes: null
)

2019 হিসাবে, এই বৈশিষ্ট্যটি জেটব্রেইনস দ্বারা রিসার্চারে প্রয়োগ করা হয়েছে। এটি আসলে এই পরিস্থিতিতে খুব সহায়ক।
জেমি

10

আপনি যদি এমভিসি ফিউচার অ্যাসেম্বলি দখল করেন (যা আমি অত্যন্ত সুপারিশ করব) তবে আপনি অ্যাকশনলিংক এবং ল্যাম্বদা তৈরির সময় জেনেরিকটি ব্যবহার করতে পারেন রুটটি নির্মাণ করতে:

<%=Html.ActionLink<Product>(c => c.Action( o.Value ), "Details" ) %>

আপনি এখানে ফিউচার সমাবেশ পেতে পারেন: http://aspnet.codeplex.com/Re कृपया / ProjectReleases.aspx?ereIId=24471


আসল লিঙ্কটির জন্য ধন্যবাদ - এটি সন্ধান করার চেষ্টা করা হয়েছিল!
পারহেন্তিয়ান

1
এটি এমভিসি 2 তে অন্তর্ভুক্ত করা না হলেও এটির সাথে যত্নশীল। যুক্তিটি হ'ল পদক্ষেপগুলি অগত্যা পদ্ধতিগুলি নয় (যা আমি সম্মত করি তবে এটি স্থানান্তরিত হওয়ার জন্য ব্যথা হতে চলেছে কারণ আমরা জেনেরিক পদ্ধতিটি কিছুক্ষণ ব্যবহার করছি)। এটি 2-এ কেন রাখা হয়নি তার পুরো নিবন্ধটি এখানে: haacked.com/archive/2008/08/29/…
স্টু

7

আপনি অ্যাকশনলিঙ্কের ওভারলোডকে ভুলভাবে আঘাত করছেন। পরিবর্তে এটি চেষ্টা করুন।

<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>


3

একটি বিকল্প সমাধান Urlহ'ল hrefএকটি <a>ট্যাগের বৈশিষ্ট্য নির্ধারণের জন্য সহায়তাকারী অবজেক্টটি ব্যবহার করা হবে :

<a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a>

1

নোট করুন যে বিশদগুলি "পণ্য" ফোল্ডারের অধীনে একটি "দেখুন" পৃষ্ঠা।

প্রোডাক্ট আইডি হ'ল টেবিলের প্রাথমিক কী। এখানে সূচিপত্র থেকে লাইনটি দেওয়া হয়েছে

 @Html.ActionLink("Details", "Details","Products" , new  {  id=item.ProductId  },null)

0

এই কোডটি আমার জন্য আংশিক দৃষ্টিতে কাজ করেছে:

<a href="/Content/Index?SubCategoryId=@item.Id">@item.Title</a>

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