2010-11-06 37 views
5

Tengo una lista desplegable: <% = Html.DropDownList ("ddlNames", nueva SelectList (Model.NameList, "ID", "Nombre"))%>Html.ActionLink con valor de ID de una lista desplegable

Tengo una ActionLink: <%: Html.ActionLink ("editar", "Editar", "Miembros", nueva área de {= "MembersArea", id = XXX}, null)%>

Quiero el valor de la lista desplegable en XXX. Así que quiero usar los valores de los controles en una vista en ActionLink. ¿Es posible de una manera simple?

gracias,

Filip

+0

Solo para aclarar: desea que el enlace a tomar el valor seleccionado de la DDL? Entonces, ¿siempre que cambie el DDL, quiere que se modifique el valor del enlace? Porque eso requerirá javascript para actualizar el valor como en la respuesta de @ Darin. – TJB

+0

sí, quiero hacer eso. – Filip

Respuesta

3

No puede hacer esto porque los ayudantes HTML ejecutan en el lado del servidor, mientras que el valor desplegable puede cambiar en el lado del cliente. La única forma de lograrlo es usar javascript. Se podría inscribirse en el evento onchange del desplegable y modificar el valor del href del ancla:

$(function() { 
    $('#ddlNames').change(function() { 
     var value = this.value; // get the selected value 
     // TODO: modify the value of the anchor 
    }); 
}); 

Esto probablemente no es la mejor solución, porque las rutas están configurados en el lado del servidor y con el fin de modificar el valor del enlace que necesita para hacer alguna manipulación de cadenas en el lado del cliente.

Como alternativa puede usar un formulario y un botón de enviar en lugar de un ancla. De esta manera el valor seleccionado de la lista desplegable se enviará automáticamente al servidor y no se necesita ningún javascript:

<% using (Html.BeginForm("Edit", "Members", new { area = "MembersArea" })) { %> 
    <%= Html.DropDownListFor(x => x.SelectedName, 
     new SelectList(Model.NameList, "ID", "Name"))%> 
    <input type="submit" value="Edit" /> 
<% } %> 
3

En lugar de modificar el valor del ancla cada vez que se cambia un desplegable correspondiente, simplemente modificarlo una vez, al hacer clic.

Ejemplo usando la maquinilla de afeitar:

@Html.DropDownList("DropDownFirstNames", new SelectList(Model.FirstNames, "ID", "Name")) 
@Html.DropDownList("DropDownLastNames", new SelectList(Model.LastNames, "ID", "Name")) 
@Html.ActionLink("Submit name", "ActionName", "ControllerName", null, new { @id = "SubmitName" }) 

<script type="text/javascript"> 
    $('#SubmitName').click(function() { 
     var first = $('#DropDownFirstNames').val(); 
     var last = $('#DropDownLastNames').val(); 
     var path = '@Url.Content("~/ControllerName/ActionName")' + "?firstId=" + first + "+&lastId=" + last 
     $(this).attr("href", path); 
    }); 
</script> 
Cuestiones relacionadas