2012-04-17 10 views
20

का निर्माण करते समय आईडी शामिल है I ASP.Net MVC का उपयोग कर रहा हूं। यहाँ एक नियंत्रक नामित कोर्स से मेरी कोड के टुकड़े है:URL. URL में URL

public ActionResult List(int id) 
{ 
    var viewmodel.ShowUrl = Url.Action("Show", "Course"); 


    ... 
} 

public ActionResult Show(int id) 
{ 
    ... 
} 

viewmodel.ShowUrl ऊपर उठाता है जो कुछ भी मूल्य "आईडी" पैरामीटर का है। तो viewmodel.ShowUrl बन जाता है "/ कोर्स/शो/151" (आईडी का मूल्य 151 है); मैं उपयोगकर्ता पर बातचीत के आधार पर ग्राहक पर आईडी भाग सेट करने में सक्षम होना चाहता हूं। मुझे व्यूमोडेल का मूल्य चाहिए। शोउरल "/ कोर्स/शो" होना चाहिए।

यह मेरे लिए एक बग जैसा लगता है। मैं यूआरएल नहीं कह रहा हूं। आईडी मान को शामिल करने के लिए। यह अपने आप कर रहा है।

var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue}); 

तो, आप MVC आईडी मान जोड़ने से रोक है: मैं कुछ इस तरह करना होगा मैं आईडी मान तो सेट करना चाहते हैं? मैं viewmodel हार्डकोड कर सकता हूं। "/ कोर्स/शो" के लिएShowUrl लेकिन यह एक क्लूजी समाधान प्रतीत होता है। धन्यवाद।

+0

मैं बिल्कुल याद नहीं कर सकते लेकिन '' Routedata' ViewData' पर है और यही कारण है कि इसे पारित है हल करने के लिए UrlParameter.Optional उपयोग कर सकते हैं। मुझे लगता है कि आप 'Url.Action (" शो "," कोर्स ", नया {}) कर सकते हैं;' '' ViewData' ऑब्जेक्ट पर 'रूटडेटा' खाली करें। –

उत्तर

7

मैं आपके रूटिंग में अनुमान लगा रहा हूं, आप यह निर्दिष्ट नहीं कर रहे हैं कि आईडी एक वैकल्पिक पैरामीटर है। नमूना प्रोजेक्ट में डिफ़ॉल्ट मार्ग यहां दिया गया है।

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults 
); 

id = UrlParameter.Optional को शामिल करने पर ध्यान दें। इसके बिना, आपको वह व्यवहार मिलेगा जिसका आप वर्णन कर रहे हैं क्योंकि ऐसा लगता है कि आईडी अनिवार्य है।

एक तरफ नोट पर, यदि आपकी शो क्रिया में हमेशा एक आईडी नहीं है तो यह शून्य या डिफ़ॉल्ट प्रदान करना चाहिए।

public ActionResult Show(int? id) 
public ActionResult Show(int id = 0) 

अन्यथा जब आप आईडी पैरामीटर के बिना यूआरएल लोड करने का प्रयास करते हैं तो आपको एक त्रुटि मिल जाएगी।

19

बस एक ही समस्या भर में आया था और इसलिए आप जानते हैं, आप भी सिर्फ एक खाली स्ट्रिंग का उपयोग कर सकते हैं:

@Url.Action("Show", "Course", new { id = "" }) 
9

मैं जानता हूँ कि यह पुराना है, लेकिन मैं इस पाया है, लेकिन के किसी भी पसंद नहीं आया इन समाधानों, इसलिए मैंने देखा और पाया https://stackoverflow.com/a/19110921/1130636

आप इस समस्या

Url.Action("Show", "Course", new { id = UrlParameter.Optional })