ASP.NET MVC Html.ActionLink এ অ্যাঙ্কর ট্যাগ সহ


151

এএসপি.নেট এমভিসিতে, আমি একটি লিঙ্ক তৈরি করার চেষ্টা করছি যাতে একটি অ্যাঙ্কর ট্যাগ অন্তর্ভুক্ত থাকে (এটি ব্যবহারকারীকে একটি পৃষ্ঠায় নির্দেশনা দেয় এবং পৃষ্ঠার একটি নির্দিষ্ট বিভাগ)।

আমি যে ইউআরএল তৈরি করতে চাইছি তা নীচের মত হওয়া উচিত:

<a href="/category/subcategory/1#section12">Title for a section on the page</a>

আমার রাউটিংটি স্ট্যান্ডার্ডের সাথে সেট আপ করা হয়েছে:

routes.MapRoute("Default", "{controller}/{action}/{categoryid}"); 

অ্যাকশন লিঙ্ক সিনট্যাক্স যা আমি ব্যবহার করছি তা হ'ল:

<%foreach (Category parent in ViewData.Model) { %>
<h3><%=parent.Name %></h3>
<ul>
<%foreach (Category child in parent.SubCategories) { %>
    <li><%=Html.ActionLink<CategoryController>(x => x.Subcategory(parent.ID), child.Name) %></li>
<%} %>
</ul>
<%} %>

আমার নিয়ামক পদ্ধতিটি নিম্নরূপ:

public ActionResult Subcategory(int categoryID)
{
   //return itemList

   return View(itemList);
}

উপরোক্তভাবে সঠিকভাবে একটি URL প্রদান করে:

<a href="/category/subcategory/1">Title for a section on the page</a>

আমি কীভাবে # বিভাগ 12 অংশ যুক্ত করব তা বুঝতে পারি না । "বিভাগ" শব্দটি হ'ল পৃষ্ঠাগুলি ভাঙ্গার জন্য আমি যে কনভেনশনটি ব্যবহার করছি তা হল, এবং 12 টি উপশ্রেণীটির আইডি, অর্থাৎ চাইল্ড.আইডি।

কিভাবে আমি এটি করতে পারব?

উত্তর:


97

আমি সম্ভবত লিঙ্কটি নিজেই তৈরি করব, এটির মতো:

<a href="<%=Url.Action("Subcategory", "Category", new { categoryID = parent.ID }) %>#section12">link text</a>

20
@ ব্র্যাড উইলসনের বর্ণনা অনুসারে অ্যাকশনলিঙ্কের জন্য সত্যই ওভারলোডগুলি ব্যবহার করা উচিত।
mattruma

18
@ ম্যাটট্রুমা দুঃখিত আমি একমত নই চুমু খেতে হবে। কোনও পরামিতি পূর্ণ সদস্য কেন, যার মধ্যে কিছু শূন্য হিসাবে রেখে দেওয়া হয়, যখন আপনি কেবল এটি স্পষ্টভাবে বর্ণনা করতে পারেন। উপরের অর্থ কী বোঝাতে পারে যে কেউ ব্র্যাডের প্রতিক্রিয়াটিকে বিশৃঙ্খলাযুক্ত করে এবং আপনাকে বুদ্ধি খনন করতে হবে তা দেখতে পাবে। অনেকগুলি পরামিতি একটি স্বীকৃত বিরোধী প্যাটার্ন .. c2.com/cgi/wiki?TooManyParaters
এড ব্ল্যাকবার্ন

2
আমি রাজী. উভয় পদ্ধতিই কাজ করে, তবে যেহেতু ইউআরএলগুলিতে টুকরো টুকরোটি নির্দিষ্ট করা হয়েছে অদূর ভবিষ্যতে পরিবর্তিত হবে না, তাই আমি মনে করি যে এই উপায়টি আসলে এর চেয়ে বেশি পঠনযোগ্য এবং আরও পরিষ্কার inte যদি প্রয়োজন হয়, আপনি এখনও একটি কাস্টম পদ্ধতিতে Urlবা Htmlঅবজেক্টটি প্রসারিত করতে পারেন যার মধ্যে একটি খণ্ড স্ট্রিং যুক্ত করার একটি সহজ উপায় অন্তর্ভুক্ত রয়েছে।
LorenzCK

282

অ্যাকশনলিঙ্কের ওভারলোডগুলি রয়েছে যা খণ্ডের পরামিতি নেয়। "বিভাগ 12 "টিকে আপনার খণ্ড হিসাবে পাস করার ফলে আপনি তার পরে এমন আচরণ পাবেন।

উদাহরণস্বরূপ, লিঙ্কএক্সটেনশনগুলি কল করুন A অ্যাকশনলিঙ্ক পদ্ধতি (এইচটিএমএলহেলপার, স্ট্রিং, স্ট্রিং, স্ট্রিং, স্ট্রিং, স্ট্রিং, স্ট্রিং, অবজেক্ট, অবজেক্ট) :

<%= Html.ActionLink("Link Text", "Action", "Controller", null, null, "section12-the-anchor", new { categoryid = "blah"}, null) %>

1
এই ওভারলোডগুলি কি কোনও এক্সটেনশন লাইব্রেরির অংশ? আমি তাদের পেতে বলে মনে হচ্ছে না।
গ্রেনেড

দুটি রয়েছে: পাবলিক স্ট্যাটিক স্ট্রিং অ্যাকশনলিঙ্ক (এই এইচটিএমএলহেল্পার এইচটিএমএল হেল্পার, স্ট্রিং লিঙ্কটেক্সট, স্ট্রিং অ্যাকশননাম, স্ট্রিং কন্ট্রোলারনাম, স্ট্রিং প্রোটোকল, স্ট্রিং হোস্টনাম, স্ট্রিং ফ্রেগমেন্ট, অবজেক্ট রুটভ্যালিজ, অবজেক্ট এইচটিএমএল এ্যাট্রিবিউটস); পাবলিক স্ট্যাটিক স্ট্রিং অ্যাকশনলিঙ্ক (এই এইচটিএমএল হেল্পার এইচটিএমএল হেল্পার, স্ট্রিং লিঙ্কটেক্সট, স্ট্রিং অ্যাকশননাম, স্ট্রিং কন্ট্রোলার নাম, স্ট্রিং প্রোটোকল, স্ট্রিং হোস্টনাম, স্ট্রিং টুকরা, রুটভ্যালিউডিয়ারিয়া রুটভ্যালুইজ, আইডিরিয়া <স্ট্রিং, অবজেক্ট> এইচটিএমএল অ্যাট্রিবিউটস);
ব্র্যাড উইলসন

11
এই উত্তর হওয়া উচিত।
রুবেন্স মারিজুজ্জো

1
এইচটিএমএল.অ্যাকশনলিঙ্কের ওভারলোডগুলি যে খণ্ডটি পেরিয়ে অ্যাঙ্কারের স্পেসিফিকেশনকে মঞ্জুরি দেয়, আপনাকে নাম দিয়ে নিয়ামকটি পাস করতে বাধ্য করে। আমি এটা পছন্দ করি না। যদি নিয়ামকের নামটি ভুল হয় তবে একটি সংকলন ত্রুটির পরিবর্তে রান-টাইম ব্যতিক্রম ঘটবে।
আর। শেরুর্স

1
@ রবার্টমিস্কি যদি আপনার লিঙ্ক পাঠ্যটি কেবল পাঠ্যের চেয়ে বেশি হয় তবে Html.ActionLink()কোনও পরিস্থিতিতে কাজ করবে না - আপনার href=@Url.Action()স্টাইল সিনট্যাক্স ব্যবহার করতে হবে ।
ক্যাটস্টেভেনস

15

আমি মনে করি না এএসপি.নেট এমভিসি (এএসপি.নেট এমভিসি 3+ আমি বিশ্বাস করি) / রেজারের প্যারামিটারবেল্ডেক্লারেশন বা এটি যাকে বলে (প্যারামিটার: এক্স) বৈশিষ্ট্যটি চালু করা হয়েছিল, তবে আমার কাছে এটি অবশ্যই সঠিক উপায় এএসপি.নেট এমভিসিতে একটি অ্যাঙ্কারের সাথে একটি লিঙ্ক তৈরি করুন।

@Html.ActionLink("Some link text", "MyAction", "MyController", protocol: null, hostName: null, fragment: "MyAnchor", routeValues: null, htmlAttributes: null)

এমনকি এড ব্ল্যাকবার্নস এই উত্তর থেকে অ্যান্টিপ্যাটার্ন যুক্তিও এর সাথে প্রতিযোগিতা করতে পারে না।


1
আক্ষরিকভাবে এটি আমার জীবন বাঁচিয়েছিল। আপনার পোস্টটি এখানে আমার সমাধান হিসাবে যুক্ত করে stackoverflow.com/questions/32420028/…
ম্যাথু

11

আমি কেবল এটির মতো করেছিলাম:

<a href="@Url.Action("Index","Home")#features">Features</a>

1

বাস্তব জীবনের উদাহরণ এখানে is

@Html.Grid(Model).Columns(columns =>
    {
           columns.Add()
                   .Encoded(false)
                   .Sanitized(false)
                   .SetWidth(10)
                   .Titled(string.Empty)
                   .RenderValueAs(x => @Html.ActionLink("Edit", "UserDetails", "Membership", null, null, "discount", new { @id = @x.Id }, new { @target = "_blank" }));

  }).WithPaging(200).EmptyText("There Are No Items To Display")

এবং লক্ষ্য পৃষ্ঠায় রয়েছে টিএবিএস

<ul id="myTab" class="nav nav-tabs" role="tablist">

        <li class="active"><a href="#discount" role="tab" data-toggle="tab">Discount</a></li>
    </ul>

0

আপনি যদি সবসময় একই বুকমার্কে ব্যবহারকারীকে পুনঃনির্দেশ করতে চান ততক্ষণ আপনি সাবক্যাটরি অ্যাকশন পদ্ধতিতে অ্যাকশনফিল্টার প্রয়োগ করলে আমার সমাধান কাজ করবে:

http://spikehd.blogspot.com/2012/01/mvc3-redirect-action-to-html-bookmark.html

এটি এইচটিএমএল বাফারকে সংশোধন করে এবং ব্রাউজারটিকে বুকমার্ক সংযোজন করার নির্দেশ দেওয়ার জন্য জাভাস্ক্রিপ্টের একটি ছোট টুকরো আউটপুট করে।

অবশ্যই জাভাস্ক্রিপ্টটি ইউআরএলটিতে বুকমার্ক ব্যবহার না করে ম্যানুয়ালি স্ক্রোল করতে পরিবর্তন করতে পারে!

আশা করি এটা সাহায্য করবে :)


0

আমি এটি করেছি এবং এটি অন্য দর্শনে পুনঃনির্দেশের জন্য কাজ করে আমি মনে করি আপনি যদি # সেকশনলিঙ্ক যুক্ত করেন তবে এটি কাজ করবে

<a class="btn yellow" href="/users/Create/@Model.Id" target="_blank">
                                        Add As User
                                    </a>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.