Pregunta

Estoy transmitiendo alguna información del modelo a un ActionLink, pero también me gustaría proporcionar a la acción los valores de algunas entradas en la página. Por ejemplo, si tuviera algo como esto:

<input Name="MyInput" />

<%: Html.ActionLink("MyAction", "MyController", Model.Value);

Me gustaría que la acción tenga en cuenta ambos modelos. Value (que se pasa por parámetro) y el valor de MyInput. Normalmente usaría una colección de formulario, pero en este caso no puedo hacer un envío.

Entonces, ¿cómo puedo pasar el valor de MyInput a MyAction? ¿Tendría que agregar una propiedad llamada MyInput a mi modelo? Suponiendo que eso funcionaría, ¿hay una manera más fácil, o al menos una que no implique modificar el modelo?

¿Fue útil?

Solución

No hay forma de hacer esto en HTML, por lo tanto, no hay una manera de hacerlo en ASP.NET MVC.

Hay dos posibles soluciones para esto que puede elegir:

  1. Use JavaScript de tal manera que cuando el usuario edite el cuadro de texto, cambia dinámicamente el valor de la etiqueta de anclaje para incluir lo que escribieron. No puede usar el enrutamiento ASP.NET para esto porque eso se ejecuta en el servidor y necesita código del lado del cliente.

  2. Haga un formulario envío en lugar de un enlace. Esta es la forma recomendada en HTML. Cuando el usuario envía datos, debe estar en un formulario. Envuelva todo en una etiqueta de formulario y coloque el cuadro de texto y un botón allí. Establezca la acción del formulario para que sea la URL a la que desea que publique.

Esta es la misma respuesta que puse esta pregunta, aunque el choque de la otra pregunta podría haber tenido una idea ligeramente diferente.

Otros consejos

Determiné que probablemente podría haber leído los valores del cuadro de texto a través de JavaScript (probablemente habría usado jQuery), y los había pasado como parámetros como parte de un tipo anónimo (en lugar de solo usar model.value). Sin embargo, decidí cambiar de usar un enlace de acción para simplemente hacer un formulario envío y usar el formulection. Simplemente tenía más sentido con la página que estaba construyendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top