एएसपी.नेट एमवीसी पूर्वावलोकन 4 में फॉर्म सबमिशन के लिए रूटिंग इंजन का उपयोग करें

मैं एएसपी.नेट एमवीसी पूर्वावलोकन 4 का उपयोग कर रहा हूं और फॉर्म सबमिशन के लिए रूटिंग इंजन का उपयोग कैसे करना चाहता हूं।

उदाहरण के लिए, मेरे पास एक मार्ग है:

routes.MapRoute(
            "TestController-TestAction",
            "TestController.mvc/TestAction/{paramName}",
            new { controller = "TestController", action = "TestAction", id = "TestTopic" }
            );

और एक ऐसा फॉर्म घोषणा जो इस तरह दिखती है:

<% using (Html.Form("TestController", "TestAction", FormMethod.Get))
   { %>
     <input type="text" name="paramName" />
     <input type="submit" />
<% } %>

जो प्रस्तुत करता है:

<form method="get" action="/TestController.mvc/TestAction">
  <input type="text" name="paramName" />
  <input type="submit" />
</form>

फॉर्म सबमिशन का परिणामी यूआरएल है:

localhost/TestController.mvc/TestAction?paramName=value

क्या इस फॉर्म सबमिशन मार्ग को वांछित यूआरएल में रखने का कोई तरीका है:

localhost/TestController.mvc/TestAction/value

एकमात्र समाधान जो मैं सोच सकता हूं वह एक अलग क्रिया बनाना है जो अनुरोध पैरामीटर की जांच करता है, या जावास्क्रिप्ट का उपयोग करता है।

0
ro fr bn

3 उत्तर

उपाय:

public ActionResult TestAction(string paramName)
{
    if (!String.IsNullOrEmpty(Request["paramName"]))
    {
        return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
    }
    /* ... */
}
0
जोड़ा
यह सर्वर के लिए 2 अनुरोध करता है, ठीक है?
जोड़ा लेखक Maslow, स्रोत
@ मास्लो यूप! एक 302 रीडायरेक्ट हमेशा वहां रहेगा
जोड़ा लेखक shashwat, स्रोत

अपने मार्ग में, यूआरएल के {paramName} भाग से छुटकारा पाएं। यह होना चाहिए:

TestController.mvc/TestAction

चूंकि वह यूआरएल है जिसे आप रूट करने का अनुरोध चाहते हैं। तब आपका फॉर्म उस यूआरएल पर पोस्ट करेगा। पोस्ट फॉर्म मान स्वचालित रूप से एक एक्शन विधि के पैरामीटर के लिए मैप किए जाते हैं, इसलिए चिंता न करें कि वह डेटा आपके एक्शन विधि में नहीं है।

0
जोड़ा

My understanding is that this is how HTML works. If you do a <form url="foo" method="get"> and post the form, then the form will post foo?

param1=value1&...&paramn=valuen

एमवीसी के साथ इसका कोई लेना-देना नहीं है।

इसके अलावा, आरईएसटी का कौन सा हिस्सा यूआरएल का उल्लंघन करता है? यह एक सुंदर यूआरएल नहीं है, लेकिन आरईएसटी की सख्त परिभाषा के द्वारा, यह रीस्टफुल हो सकता है। REST निर्दिष्ट नहीं करता है कि क्वेरी पैरामीटर को URL सेगमेंट में होना चाहिए। और इस मामले में, वे क्वेरी पैरामीटर हैं।

0
जोड़ा
हाँ तुम सही हो - धन्यवाद। इस पर ध्यान देकर मुझे यह भी यकीन नहीं है कि मैं क्या सोच रहा था - शायद एमवीसी ऐप को फ़ॉर्म सबमिशन के बाद एक अच्छे नए यूआरएल पर जाने के लिए। बाद में जीईटी/पोस्ट गुण चीजों की मदद करते हैं।
जोड़ा लेखक Matt Mitchell, स्रोत