10

साथ Html.ActionLink का उपयोग करते हुए मैं निम्न HTML है:RouteValues ​​

<a href="/Product/Details?ProductId=1">My Product Name</a> 

हालांकि, जब मैं इस पर क्लिक करें, मैं निम्नलिखित त्रुटि मिलती है:

<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%> 

इस के रूप में प्रदान की जा रही है

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'MyProject.Controllers.ProductController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

Parameter name: parameters

ऐसा प्रतीत होता है कि मेरी रूटिंग को "productId = 1" क्वेरी स्ट्रिंग पसंद नहीं है।

अगर मैं बजाय का उपयोग करें:

<%: Html.ActionLink(item.ProductName, string.Format("Details/{0}", item.ProductId), "Product", null, null)%> 

मैं नीचे दिए गए लिंक प्रदान की गई मिलती है:

<a href="/Product/Details/1">My Product Name</a> 

... और इस सही ढंग से जब क्लिक काम करता है।

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

केवल मार्ग मानचित्रण मेरे पास है:

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

उत्तर

10

बदलें कार्रवाई पैरामीटर पूर्णांक productId किया जाना है।

public ActionResult Details(int productId) 
{ 
    return View(""); 
} 

अपने नियंत्रक क्योंकि आप इसे के रूप में घोषित नहीं नल पूर्णांक इसलिए जब आप productId भेजने यह अभी भी समारोह हस्ताक्षर से मेल नहीं खाता एक "आईडी" पैरामीटर प्राप्त करने के लिए किया है।
जब आप पैरामीटर नाम निर्दिष्ट नहीं करते, Global.asax में मार्ग चूक आईडी पर पैरामीटर नाम बदलने के लिए:

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

अंतिम पंक्ति देखें।

+1

या ... यदि मैं रूटवैल्यू पैरामीटर में "id =" जोड़ता हूं: <% = HTML.ActionLink (item.ProductName, "विवरण", "उत्पाद", नया {id = item.ProductId}, शून्य)%> फिर मुझे निम्न लिंक मिलता है: My Product Name ... जो भी काम करता है! – seanfitzg

+0

@seanfitzg, आप सही हैं, लेकिन मुझे लगता है कि आप नहीं चाहते हैं कि आपके सभी पैरामीटर नाम "आईडी" हो ... – gdoron

1

आप नियंत्रक, कार्रवाई और आईडी (पैरामीटर) यदि आप /Product/Details?ProductId=1 की तरह एक यूआरएल फोन आप नियंत्रक Product लेकिन पाठ Details?ProductId=1 के साथ कार्रवाई बुला रहे हैं और उसके बाद hasn मार्ग 'के बीच विभाजक के रूप में / चरित्र सेट कर रहे हैं अगले / प्राप्त नहीं करें।

+0

दुर्भाग्य से, MapRoute विधि "?" स्वीकार नहीं करती है रूटिंग में पात्र। – seanfitzg

संबंधित मुद्दे