Asp.Net MVC ActionLink, RedirectToAction, आदि का उपयोग करते समय एक खंड पहचानकर्ता को शामिल करने का कोई तरीका है?

मैं कुछ लिंक एक टुकड़ा पहचानकर्ता शामिल करने के लिए चाहता हूँ। इस साइट पर कुछ यूआरएल की तरह:

Debugging: IE6 + SSL + AJAX + post form = 404 error#5626

क्या एमवीसी में अंतर्निहित तरीकों के साथ ऐसा करने का कोई तरीका है? या मुझे अपने स्वयं के एचटीएमएल सहायकों को रोल करना होगा?

0
ro fr bn

7 उत्तर

@Dominic,

मैं लगभग सकारात्मक हूं कि मार्ग में डालकर रूटिंग मुद्दों का कारण बन जाएगा।

@Ricky,

जब तक एमवीसी के लिए इसका समर्थन नहीं होता है, तब तक आप अपने मार्ग कैसे बनाते हैं, इसके बारे में थोड़ा और "पुराना स्कूल" हो सकता है। उदाहरण के लिए, आप कन्वर्ट कर सकते हैं:

<%= Html.ActionLink("Home", "Index") %>

में:

Home

या आप अपना खुद का सहायक लिख सकते हैं जो अनिवार्य रूप से वही काम करता है।

0
जोड़ा
मैंने एएसपी.नेट एमवीसी पूर्वावलोकन 3 के साथ मार्गों में लक्ष्य की कोशिश की और रूटिंग के साथ कोई समस्या नहीं थी। तो यद्यपि आप "लगभग सकारात्मक" हैं, लेकिन यह आपके लिए उपयोगी होगा कि आप किन मुद्दों पर विस्तार करेंगे।
जोड़ा लेखक Dominic Cooney, स्रोत

जैसा कि ब्रैड विल्सन ने लिखा था, आप तारों को संयोजित करके अपने विचारों में अपना स्वयं का लिंक बना सकते हैं। लेकिन RedirectToAction (या इसी तरह) के माध्यम से उत्पन्न रीडायरेक्ट में एक खंड नाम जोड़ने के लिए आपको इस तरह की कुछ आवश्यकता होगी:

public class RedirectToRouteResultEx : RedirectToRouteResult {

    public RedirectToRouteResultEx(RouteValueDictionary values)
        : base(values) {
    }

    public RedirectToRouteResultEx(string routeName, RouteValueDictionary values)
        : base(routeName, values) {
    }

    public override void ExecuteResult(ControllerContext context) {
        var destination = new StringBuilder();

        var helper = new UrlHelper(context.RequestContext);
        destination.Append(helper.RouteUrl(RouteName, RouteValues));

        //Add href fragment if set
        if (!string.IsNullOrEmpty(Fragment)) {
            destination.AppendFormat("#{0}", Fragment);
        }

        context.HttpContext.Response.Redirect(destination.ToString(), false);
    }

    public string Fragment { get; set; }
}

public static class RedirectToRouteResultExtensions {
    public static RedirectToRouteResultEx AddFragment(this RedirectToRouteResult result, string fragment) {
        return new RedirectToRouteResultEx(result.RouteName, result.RouteValues) {
            Fragment = fragment
        };
    }
}

और फिर, अपने नियंत्रक में, आप कॉल करेंगे:

return RedirectToAction("MyAction", "MyController")
       .AddFragment("fragment-name");

यह यूआरएल सही ढंग से उत्पन्न करना चाहिए।

0
जोड़ा
यह भी खूब रही। एमवीसी 3 में एक्शनलिंक पर एक अधिभार है जो आपको एक टुकड़ा करने देता है, लेकिन RedirectToAction नहीं।
जोड़ा लेखक kamranicus, स्रोत
तुम, महोदय, मेरे नायक हैं। :)
जोड़ा लेखक Matt DiTrolio, स्रोत

फ्रैगमेंट पहचानकर्ता एमवीसी 5 में समर्थित हैं। https://msdn.microsoft.com/en-us/library/dd460522 (v = vs.118) .aspx और https://msdn.microsoft.com/en-us/library/dd492938 (v = बनाम। 118) .aspx

0
जोड़ा

संक्षिप्त उत्तर यह है: नहीं। एएसपी.नेट एमवीसी पूर्वावलोकन 3 में एक्शन लिंक में एंकर समेत कोई प्रथम श्रेणी का तरीका नहीं है। रेल के url_for के विपरीत: एंकर, UrlHelper.GenerateUrl (और एक्शनलिंक, रीडायरेक्ट टॉक्शन और जिस पर इसका उपयोग होता है) में एक जादू प्रॉपर्टी नाम नहीं है जो आपको एंकर को एन्कोड करने देता है।

जैसा कि आप इंगित करते हैं, आप अपना खुद का रोल कर सकते हैं। यह शायद सबसे साफ समाधान है।

हैकली, आप बस एक रूट में एक एंकर शामिल कर सकते हैं और अपने पैरामीटर हैश में मान निर्दिष्ट कर सकते हैं:

routes.MapRoute("WithTarget", "{controller}/{action}/{id}#{target}");
...
<%= Html.ActionLink("Home", "Index", new { target = "foo" })%>

यह एक यूआरएल उत्पन्न करेगा जैसे होम / इंडेक्स / # foo। दुर्भाग्यवश यह यूआरएल पैरामीटर के साथ अच्छी तरह से नहीं खेलता है, जो यूआरएल के अंत में दिखाई देता है। तो यह हैक वास्तव में केवल साधारण परिस्थितियों में काम करने योग्य है जहां आपके सभी पैरामीटर यूआरएल पथ घटकों के रूप में दिखाई देते हैं।

0
जोड़ा
काम नहीं करता # को% 23 में बदल दिया गया है।
जोड़ा लेखक jpbochi, स्रोत

हम अपनी अगली रिलीज में इसके लिए समर्थन शामिल करना चाहते हैं।

0
जोड़ा
क्या यह देव 10 में रिलीज होने का लक्ष्य बन रहा है?
जोड़ा लेखक ajma, स्रोत

यह क्लाइंट साइड सॉल्यूशन है लेकिन यदि आपके पास jQuery उपलब्ध है तो आप ऐसा कुछ कर सकते हैं।

<script language="javascript" type="text/javascript">
    $(function() {
        $('div.imageHolder > a').each(function() {
            $(this).attr('href', $(this).attr('href') + '#tab-works');
        });
    });
</script>
0
जोड़ा

एमवीसी 3 (और संभवतः पहले मैंने चेक नहीं किया है) में, आप खंड पैरामीटर में गुजरने वाले UrlHelper.GenerateUrl का उपयोग कर सकते हैं। कार्यक्षमता एल को लपेटने के लिए मैं एक सहायक विधि का उपयोग करता हूं

public static string Action(this UrlHelper url, string actionName, string controllerName, string fragment, object routeValues)
{
    return UrlHelper.GenerateUrl(
        routeName: null,
        actionName: actionName,
        controllerName: controllerName,
        routeValues: new System.Web.Routing.RouteValueDictionary(routeValues),
        fragment: fragment,
        protocol: null,
        hostName: null,
        routeCollection: url.RouteCollection,
        requestContext: url.RequestContext,
        includeImplicitMvcValues: true /*helps fill in the nulls above*/
    );
}
0
जोड़ा
थोड़ा अजीब, लेकिन यह यहां सबसे अच्छे जवाब है। शायद, दूसरों को बस दिनांकित कर रहे हैं।
जोड़ा लेखक jpbochi, स्रोत