mvc asp.net-mvc-2 drop-down-menu actionlink

asp.net-mvc-2 - actionlink mvc parameters



Html.ActionLink con valor de id de una lista desplegable (2)

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

Tengo un ActionLink: <%: Html.ActionLink ("editar", "Editar", "Miembros", nuevo {area = "MembersArea", id = XXX}, nulo)%>

Quiero el valor de la lista desplegable en XXX. Por lo tanto, quiero usar los valores de los controles en una vista en ActionLink. ¿Es eso posible de una manera simple?

Gracias,

Filip


En lugar de modificar el valor del anclaje cada vez que se cambia un menú desplegable relevante, simplemente modifíquelo una vez, al hacer clic.

Ejemplo usando Razor:

@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>


No puede hacer esto porque los helpers html se 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. Puede registrarse para el evento onchange del menú desplegable y modificar el valor del href del anclaje:

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

Probablemente esta no sea la mejor solución porque las rutas están configuradas en el lado del servidor y para modificar el valor del enlace necesita 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 forma, el valor seleccionado del menú desplegable se enviará automáticamente al servidor y no 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" /> <% } %>