2009-05-11 11 views
8

Apenas estoy comenzando con mi primer proyecto en el tipo de proyecto ASP.NET MVC y estoy creando una página de Detalles en la que en lugar de pasar la plantilla (ID int), me gustaría pasar una cadena. Pero cuando estoy en modo de depuración e ingreso esto en la URL, "myString" es nulo. ¿Porque? ¿Debo cambiar algo más? ¿Alguna otra cosa?ASP.NET - El parámetro ActionResult regresa nulo siempre al pasar cadena - ¿por qué?

Así que si voy a la URL e introduzca la siguiente:

http://localhost:2345/Bank/EmployeeDetails/3d34xyz

public ActionResult EmployeeDetails(string myString) // myString is null 
{ 
    return View(); 
} 

Respuesta

34

en usted archivo Global.asax.cs, que tendrá la siguiente ruta asignada por defecto:

routes.mapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

Eso significa que un URL como http://localhost:2345/Bank/EmployeeDetails/3d34xyz irá al controlador Bank, la acción EmployeeDetails y pasar el valor 3d34xyz en un parámetro llamado id. Está perfectamente bien pasar una cuerda, pero para que funcione hay dos opciones:

1) Cambie el nombre de la variable a id en su método de acción.

public ActionResult EmployeeDetails(string id) { ... } 

2) Agregue otra ruta que coincida con el nombre que desee para su cadena. Asegúrese de hacerlo más específico que la ruta predeterminada, y para colocarlo antes de la ruta predeterminada en el archivo Global.asax.cs.

routes.mapRoute(
    "BankEmployeeDetails" 
    "Bank/EmployeeDetails/{myString}" 
    new { controller = "Bank", action = "EmployeeDetails", myString = UrlParameter.Optional }); 

Esto pasará un valor predeterminado de null a myString si no hay valor se pasa en la url, pero con la URL que ha especificado que pasará el valor 3d34xyz.

+0

Mierda. Fui demasiado lento ...: P –

+1

¡Aún mejor! ¡Mira, te recompensan por tus esfuerzos! Gracias por la lección! ¡¡¡Apreciado enormemente!!! –

+0

Me alegro de haber podido ayudar =) –

3

Renombrar myString-id si está utilizando la tabla de rutas por defecto.

+0

¡Gracias! ¡Eso es! –

1

Cambia el nombre de myString a id.

+0

¡Gracias! ¡Eso es! –

4

Suponiendo que no haya modificado las rutas por defecto (en su Global.asax.cs):

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

El método se esperaba que fuera nombrado "Identificación".

+0

¡Gracias! ¡Funciona perfectamente! –

+0

De nada. –

+0

Lamento robarte ...;) –

0

que tenían el mismo problema, sólo tiene que proporcionar el ID de la página en la que el hipervínculo para detalles (en la página del Banco aquí)

@Html.ActionLink("Details", "Details", new { id=""}) 

Esto resolvió mi problema espero que le ayuda.

Esto para MVC 5.

Cuestiones relacionadas