এইচটিএমএল এর ভিতরে এইচটিএমএল স্থাপন করা হচ্ছে? অ্যাকশনলিঙ্ক (), এবং কোনও লিঙ্ক পাঠ্য নেই?


169

আমার দুটি প্রশ্ন আছে:

  1. আমি ভাবছি Html.ActionLink()এমভিসি ভিউতে ব্যবহার করার সময় আমি কোনও লিঙ্ক পাঠ্য কীভাবে প্রদর্শন করতে পারি না (আসলে এটি হ'ল Site.Master)।

এখানে কোনও ওভারলোডেড সংস্করণ নেই যা লিঙ্ক পাঠ্যকে মঞ্জুরি দেয় না এবং যখন আমি কেবল একটি ফাঁকা জায়গায় যাওয়ার চেষ্টা করি string, সংকলকটি আমাকে বলে যে এটি একটি খালি খালি স্ট্রিংয়ের প্রয়োজন।

আমি এটা কিভাবে ঠিক করবো?

  1. <span>অ্যাঙ্কর ট্যাগের মধ্যে আমার ট্যাগ লাগানো দরকার তবে এটি কাজ করছে না Html.ActionLink();। আমি নিম্নলিখিত আউটপুট দেখতে চাই:

    স্প্যান পাঠ্য

আমি কীভাবে এএসপি.নেট এমভিসিতে অ্যাঙ্কর ট্যাগের ভিতরে ট্যাগগুলি রাখতে পারি?


ফাঁকা অ্যাকশন লিঙ্ক থাকার উদ্দেশ্য / ব্যবহার কী হবে?
ডেভিড

1
আমি একটি নেভিগেশন বারের জন্য একটি ইমেজ স্প্রিট ব্যবহার করছি, এবং <li>আপনি যেটি দেখছেন তা একটি নির্দিষ্ট নেভিগেশন বোতাম (আকার, পটভূমির পোজ ইত্যাদি সিএসএস স্টাইলশিটে উল্লিখিত) সহ। তবে এটি অবশ্যই কোনও কিছুর সাথে লিঙ্ক করা উচিত, তাই আমি পাঠ্যটি প্রদর্শন করতে চাই না। আমি চাই স্প্রাইটটি আমার জন্য এটি করুক।
মেগা ম্যাট

উত্তর:


322

এইচটিএমএল.অ্যাকশনলিঙ্ক ব্যবহারের পরিবর্তে আপনি url.Action এর মাধ্যমে একটি url রেন্ডার করতে পারেন

<a href="<%= Url.Action("Index", "Home") %>"><span>Text</span></a>
<a href="@Url.Action("Index", "Home")"><span>Text</span></a>

এবং একটি ফাঁকা url করতে আপনার থাকতে পারে

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

3
আমাকে <a href="@Url.Action("Index", "হোম >))>> <span> পাঠ্য </ span> </a> ব্যবহার করতে হয়েছিল, আমার দেব কেন আমাকে করতে হয়েছে তা জিজ্ঞাসা করার আশেপাশে নেই এটি তবে উপরের উত্তরটি ব্যবহার করে এবং এটি কার্যকর হয়নি এটি খুঁজে পেতে যে কেউ সহায়ক হতে পারে।
ডেভ হাইগ

2
রেজার টেম্পলেট ব্যবহার করার সময় @ আরআল.একশনটি। আমি উত্তর আপডেট করেছি যাতে আপনি উভয়ই দেখতে পান।
ডেভিড

<a href=@Url.Action("Create", "Product")><span>Create</span></a>কাজ করে। উদ্ধৃতি প্রয়োজন হয় না।
ডেভিড

1
স্থির বিষয়বস্তুর জন্য কেন সরাসরি এইচটিএমএল টাইপ করবেন না? এটি কম
ভার্জোজ

আপনি যদি অ্যাজাক্স ব্যবহার করতে চান তবে Asp.Net Core 2 এ আসল বিকল্প নয়।
জোরকিন্দ

17

একটি কাস্টম এইচটিএমএল হেল্পার এক্সটেনশন অন্য বিকল্প option দ্রষ্টব্য : পরামিতি অভিধানটি আমার নিজস্ব ধরণ। আপনি একটি রুটভ্যালু অভিধান অভিধানের বিকল্প দিতে পারেন তবে আপনাকে এটি আলাদাভাবে তৈরি করতে হবে।

public static string ActionLinkSpan( this HtmlHelper helper, string linkText, string actionName, string controllerName, object htmlAttributes )
{
    TagBuilder spanBuilder = new TagBuilder( "span" );
    spanBuilder.InnerHtml = linkText;

    return BuildNestedAnchor( spanBuilder.ToString(), string.Format( "/{0}/{1}", controllerName, actionName ), htmlAttributes );
}

private static string BuildNestedAnchor( string innerHtml, string url, object htmlAttributes )
{
    TagBuilder anchorBuilder = new TagBuilder( "a" );
    anchorBuilder.Attributes.Add( "href", url );
    anchorBuilder.MergeAttributes( new ParameterDictionary( htmlAttributes ) );
    anchorBuilder.InnerHtml = innerHtml;

    return anchorBuilder.ToString();
}

14

আপনাকে এজ্যাক্স বা কিছু বৈশিষ্ট্য ব্যবহার করতে হবে যা ম্যানুয়ালি লিঙ্ক তৈরি করার সময় আপনি ব্যবহার করতে পারবেন না (ট্যাগ ব্যবহার করে):

<%= Html.ActionLink("LinkTextToken", "ActionName", "ControllerName").ToHtmlString().Replace("LinkTextToken", "Refresh <span class='large sprite refresh'></span>")%>

আপনি 'লিঙ্কটেক্সট টোকেন' এর পরিবর্তে যে কোনও পাঠ্য ব্যবহার করতে পারেন, এটি কেবল প্রতিস্থাপনের জন্য রয়েছে, এটি কেবলমাত্র গুরুত্বপূর্ণ যে এটি অ্যাকশন লিঙ্কের ভিতরে অন্য কোথাও না ঘটে।


6
+1 দুর্দান্ত ধারণা। রেজারে আপনাকে এই সমস্তটি র্যাপ করতে হবেHtml.Raw()
কেরি কেন্ডাল

ধন্যবাদ :) এখন যা দেখলাম আমরা কী ব্যবহার করেছি, আমি প্রায় বিব্রত হয়ে পড়েছি, সার্ভারে এই জিনিসগুলি করা সার্ভারের সংস্থানগুলির অপচয় যেমন ...
গোরান ওব্রাদোভিক

1
যেহেতু আমি @ আজাক্স.অ্যাকশনলিঙ্কটি ব্যবহার করছি এবং সমস্ত date-বৈশিষ্ট্যগুলি ম্যানুয়ালি সেট করার মতো মনে হচ্ছে না , এটি আমার পক্ষে সেরা সমাধান। +1
asontu

ধন্যবাদ, আমি যখন অ্যাজাক্স-অ্যাকশনলিঙ্কটি ব্যবহার করছিলাম তখন মনোযোগের মতো কাজ করেছিল। এটি কোনও গতি কমিয়ে দেবে বলে মনে হচ্ছে না এবং আমি একই লেআউট এবং স্টাইলিংটি রাখলাম।
ব্ল্যাকি ওল্ফ

শুধু বলতে চাই, এই নেট কোর, ToHtmlString () কাজ v2 কারণে সরানো হয়েছে নিশ্চিত না v1 এ সম্পর্কে না
Zorkind

12

এর Url.Actionপরিবর্তে কেবল ব্যবহার করুন Html.ActionLink:

<li id="home_nav"><a href="<%= Url.Action("ActionName") %>"><span>Span text</span></a></li>

@ ক্রেইগস্টুনজকে কেন আমাদের এইচটিএমএল.অ্যাকশনলিঙ্কের পরিবর্তে ইউআরএল.অ্যাকশন ব্যবহার করা উচিত?
রক্সি'প্রো

6

এটি আমার পক্ষে সর্বদা ভাল কাজ করেছে। এটি অগোছালো এবং খুব পরিষ্কার নয়।

<a href="@Url.Action("Index", "Home")"><span>Text</span></a>


Url.Action এর এমন কোনও কনস্ট্রাক্টর নেই যা এইচটিএমএলঅ্যাট্রিবিউট গ্রহণ করবে। অ্যাকশনলিঙ্কের মতো নয়।
ব্যারিপিকার 18

2

আমি একটি কাস্টম এক্সটেনশন পদ্ধতি দিয়ে শেষ করেছি। এটি লক্ষণীয় যে, কোনও অ্যাঙ্কর অবজেক্টের ভিতরে এইচটিএমএল রাখার চেষ্টা করার সময়, লিঙ্কটি পাঠ্যটি বামে বা অভ্যন্তরীণ HTML এর ডানদিকে হতে পারে। এই কারণে, আমি বাম এবং ডান অভ্যন্তর এইচটিএমএল জন্য পরামিতি সরবরাহ করতে পছন্দ করেছি - লিঙ্ক পাঠ্যটি মাঝখানে রয়েছে। বাম এবং ডান উভয় অভ্যন্তর এইচটিএমএল optionচ্ছিক।

এক্সটেনশন পদ্ধতি অ্যাকশনলিঙ্কইনার এইচটিএমএল:

    public static MvcHtmlString ActionLinkInnerHtml(this HtmlHelper helper, string linkText, string actionName, string controllerName, RouteValueDictionary routeValues = null, IDictionary<string, object> htmlAttributes = null, string leftInnerHtml = null, string rightInnerHtml = null)
    {
        // CONSTRUCT THE URL
        var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
        var url = urlHelper.Action(actionName: actionName, controllerName: controllerName, routeValues: routeValues);

        // CREATE AN ANCHOR TAG BUILDER
        var builder = new TagBuilder("a");
        builder.InnerHtml = string.Format("{0}{1}{2}", leftInnerHtml, linkText, rightInnerHtml);
        builder.MergeAttribute(key: "href", value: url);

        // ADD HTML ATTRIBUTES
        builder.MergeAttributes(htmlAttributes, replaceExisting: true);

        // BUILD THE STRING AND RETURN IT
        var mvcHtmlString = MvcHtmlString.Create(builder.ToString());
        return mvcHtmlString;
    }

ব্যবহারের উদাহরণ:

এখানে ব্যবহারের একটি উদাহরণ রয়েছে। এই উদাহরণের জন্য আমি কেবল লিঙ্ক পাঠ্যের ডানদিকে অভ্যন্তরীণ এইচটিএমএল চেয়েছিলাম ...

@Html.ActionLinkInnerHtml(
    linkText: "Hello World"
        , actionName: "SomethingOtherThanIndex"
        , controllerName: "SomethingOtherThanHome"
        , rightInnerHtml: "<span class=\"caret\" />"
        )

ফলাফল:

এটি নিম্নলিখিত এইচটিএমএলে ফলাফল ...

<a href="/SomethingOtherThanHome/SomethingOtherThanIndex">Hello World<span class="caret" /></a>

1

আমি ভেবেছিলাম বুটস্ট্র্যাপ এবং কিছু গ্লিপিকন ব্যবহার করার সময় এটি কার্যকর হতে পারে:

<a class="btn btn-primary" 
    href="<%: Url.Action("Download File", "Download", 
    new { id = msg.Id, distributorId = msg.DistributorId }) %>">
    Download
    <span class="glyphicon glyphicon-paperclip"></span>
</a>

এটি কোনও ডাউনলোড লিঙ্ক উপস্থাপনের জন্য একটি দুর্দান্ত পেপারক্লিপ আইকন সহ একটি নিয়ামকের সাথে একটি লিঙ্কযুক্ত একটি ট্যাগ প্রদর্শন করবে এবং এইচটিএমএল আউটপুট পরিষ্কার রাখবে


1

@ টভানফসসনের উত্তরের একটি উবার প্রসার এখানে দেওয়া হয়েছে। আমি এটি থেকে অনুপ্রাণিত হয়েছি এবং আরও জেনেরিক করার সিদ্ধান্ত নিয়েছি।

    public static MvcHtmlString NestedActionLink(this HtmlHelper htmlHelper, string linkText, string actionName,
        string controllerName, object routeValues = null, object htmlAttributes = null,
        RouteValueDictionary childElements = null)
    {
        var htmlAttributesDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);

        if (childElements != null)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);

            var anchorTag = new TagBuilder("a");
            anchorTag.MergeAttribute("href",
                routeValues == null
                    ? urlHelper.Action(actionName, controllerName)
                    : urlHelper.Action(actionName, controllerName, routeValues));
            anchorTag.MergeAttributes(htmlAttributesDictionary);
            TagBuilder childTag = null;

            if (childElements != null)
            {
                foreach (var childElement in childElements)
                {
                    childTag = new TagBuilder(childElement.Key.Split('|')[0]);
                    object elementAttributes;
                    childElements.TryGetValue(childElement.Key, out elementAttributes);

                    var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(elementAttributes);

                    foreach (var attribute in attributes)
                    {
                        switch (attribute.Key)
                        {
                            case "@class":
                                childTag.AddCssClass(attribute.Value.ToString());
                                break;
                            case "InnerText":
                                childTag.SetInnerText(attribute.Value.ToString());
                                break;
                            default:
                                childTag.MergeAttribute(attribute.Key, attribute.Value.ToString());
                                break;
                        }
                    }
                    childTag.ToString(TagRenderMode.SelfClosing);
                    if (childTag != null) anchorTag.InnerHtml += childTag.ToString();
                }                    
            }
            return MvcHtmlString.Create(anchorTag.ToString(TagRenderMode.Normal));
        }
        else
        {
            return htmlHelper.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributesDictionary);
        }
    }

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

লুপগুলির জন্য নেস্টেড সম্পর্কে আমি খুব সম্মত। সংক্ষিপ্ততার জন্য এটি সেখানে রয়েছে। অপ্টিমাইজেশনের অবস্থান থেকে হ্যাঁ লুপের জন্য নীস্টগুলি নিজস্ব ব্যক্তিগত পদ্ধতিতে হওয়া উচিত, এবং পরামিতিগুলি জোর দেওয়া দরকার, কোডটি আরও অনেক প্রতিরক্ষামূলক হওয়া দরকার, ইত্যাদি
উইলিয়াম-কিড

0

এটা খুবই সাধারণ.

আপনি যদি গ্লাইফিকন আইকনটির মতো কিছু পেতে চান এবং তারপরে "উইশ তালিকা",

<span class="glyphicon-heart"></span> @Html.ActionLink("Wish List (0)", "Index", "Home")

0

বুটস্ট্র্যাপ উপাদান ব্যবহার করে আমার সমাধান:

<a class="btn btn-primary" href="@Url.Action("resetpassword", "Account")">
    <span class="glyphicon glyphicon-user"></span> Reset Password
</a>

0

কোডটি নীচে চেষ্টা করুন যা আপনাকে সহায়তা করতে পারে।

 @Html.ActionLink(" SignIn", "Login", "Account", routeValues: null, htmlAttributes: new {  id = "loginLink" ,**@class="glyphicon glyphicon-log-in"** }) 

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