Passing string parameters MVC 3

2019-07-18 04:27发布

问题:

I'm trying to pass a string parameter in MVC3.

The URL that gets generated is:

http://localhost:50164/Property/Browse/Oregon

This appears to be the Property controller class in the function "Browse" with parameter "Oregon".

The right function gets called, but the string appears to be empty.

        public ViewResult Browse(string location)
        {
            //counted_properties: 3 counted_properties_here: 0 
            ViewData["counted_properties"] = db.Properties.Count(); // debug    3 total
            ViewData["counted_properties_here"] = db.Properties.Where(p => p.location == "Oregon").Count(); // debug    1 (the right answer!)
//return View(db.Properties.Where(p => p.location == tmp_location).ToList());     // 0 (bad!)

            ViewData["the_location"] = location;
            int size = tmp_location.Length;     // unhandled null exception when tmp_location = location
            ViewData["location_length"] = size;
     //       return View(db.Properties.Where(p => p.location == "Oregon").ToList());     // Right! but hardcoded
            return View(db.Properties.Where(p => p.location == location).ToList());
        }

When I return the lambda using the hard coded string (Oregon), I get the right answer.

When I return the lambda using the parameter (string location) I get zero results.

When I try to display ViewData["the_location"] which is a direct copy of the parameter it is blank. Maybe I'm not trying to display it correctly. Here is my view:

Location: @Html.Encode(ViewData["the_location"] )

When I call location.Length I get an unhandled null exception, but this works when I call Length on a hard coded parameter like "Oregon".

It looks like somehow the string is empty, but this doesn't make sense since I see "Oregon" in the URL when it gets to the property/browse function.

I'm beginning to wonder if I am allowed to pass strings as arguments in MVC as I haven't seen any examples with string parameters.

This is a continuation of an unsolved problem:

C#/ASP.NET lambda conversion

By the way, I'm not trying to promote Oregon here. I've never been there. Maybe it's a good place, though.

回答1:

Check your routing. Traditionally URLs like the one you give will map the value ("Oregon") to the "id" parameter, rather than the location parameter that you're trying to use. Either rename the parameter or change the route to use "{controller}/{action}/{location}".