Estoy usando C#, MVC3, y la maquinilla de Afeitar.

Tengo una función de javascript (en la vista) que se llama cuando un determinado elemento de menú se hace clic. En esta función, necesito construir una nueva dirección URL con parámetros (basado en otras selecciones en la pantalla) y redirigir a la misma. Se quiere hacer algo como esto:

ValueA y ValueB son variables en la sección de javascript y se rellenan con valores.

function doSomething(ID) {
    location.href =  "../Area/Controller/Action?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB;
  }

Sin embargo, debido a la naturaleza de la MVC es necesario asegurarse de que la URL está siempre en lo correcto, independientemente de cómo el usuario llegó a la página. He intentado utilizar @Url.Contenido(«») (véase el siguiente bloque de código) pero el problema que me encuentro es:

  • El nombre de ‘ID’ no existe en el contexto actual
  • El nombre de ‘ValueA’ no existe en el contexto actual
  • El nombre de ‘ValueB’ no existe en el contexto actual

Aquí es un ejemplo de lo que me gustaría hacer, pero conseguir los errores mencionados anteriormente en:

function doSomething(ID) {
    location.href = @Url.Content("~/Area/Controller/Action?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB);
  }

¿Cómo puedo hacer que esto funcione? Hay una manera mejor?

Gracias,
Tony

1 Comentario

  1. 6

    Debe concatenar la parte estática a la dinámica de la parte:

    location = "@Url.Content("~/Area/Controller/Action")?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB;

    El exterior "@...?ID=" es un Javascript literal de cadena.

    @Url.Content("...") es de código del lado del servidor que emite el texto sin formato en el Javascript literal.

    • Funciona muy bien! Esto hace un montón de sentido. Estoy deseando que yo había pensado en ello.
    • Por CIERTO, usted debe llamar a @Url.Action en lugar de Content.
    • Gracias. He modificado el código para utilizar @Url.Action ya que es en el mismo controlador, de la vista actual. Las grandes obras.

Dejar respuesta

Please enter your comment!
Please enter your name here