c# html asp.net asp.net-mvc html.dropdownlistfor

c# - evento onchange para html.dropdownlist



asp.net asp.net-mvc (5)

Estoy intentando activar un método de acción para el evento onchange para la lista desplegable, ¿cómo puedo hacer esto sin usar jquery onchange?

@Html.DropDownList("Sortby", new SelectListItem[] { new SelectListItem() { Text = "Newest to Oldest", Value = "0" }, new SelectListItem() { Text = "Oldest to Newest", Value = "1" }})

Gracias


Puede intentar esto si está pasando un valor al método de acción.

@Html.DropDownList("Sortby", new SelectListItem[] { new SelectListItem() { Text = "Newest to Oldest", Value = "0" }, new SelectListItem() { Text = "Oldest to Newest", Value = "1" }},new { onchange = "document.location.href = ''/ControllerName/ActionName?id='' + this.options[this.selectedIndex].value;" })

Elimine la cadena de consulta en caso de que no pase ningún parámetro.


Puedes hacerlo

@Html.DropDownList("Sortby", new SelectListItem[] { new SelectListItem() { Text = "Newest to Oldest", Value = "0" }, new SelectListItem() { Text = "Oldest to Newest", Value = "1" } , new { onchange = @"form.submit();" } })


Si no quieres jquery, puedes hacerlo con javascript:

@Html.DropDownList("Sortby", new SelectListItem[] { new SelectListItem() { Text = "Newest to Oldest", Value = "0" }, new SelectListItem() { Text = "Oldest to Newest", Value = "1" }}, new { @onchange="CallChangefunc(this.value)" }) <script> function CallChangefunc(val) { window.location.href="/Controller/Actionmethod?value="+val; } </script>


Si tienes una vista de lista puedes hacer esto:

  1. Definir una lista de selección:

    @{ var Acciones = new SelectList(new[] { new SelectListItem { Text = "Modificar", Value = Url.Action("Edit", "Countries")}, new SelectListItem { Text = "Detallar", Value = Url.Action("Details", "Countries") }, new SelectListItem { Text = "Eliminar", Value = Url.Action("Delete", "Countries") }, }, "Value", "Text"); }

  2. Use la Lista de selección definida, creando una identificación diferente para cada registro (recuerde que la identificación de cada elemento debe ser única en una vista), y finalmente llame a una función javascript para el evento onchange (incluya parámetros en el ejemplo url y clave de registro):

    @Html.DropDownList("ddAcciones", Acciones, "Acciones", new { id = item.CountryID, @onchange = "RealizarAccion(this.value ,id)" })

  3. La función onchange puede ser algo como:

    @section Scripts { <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script> <script type="text/javascript"> function RealizarAccion(accion, country) { var url = accion + ''/'' + country; if (url != null && url != '''') { window.location.href = url ; } } </script> @Scripts.Render("~/bundles/jqueryval") }


@Html.DropDownListFor(m => m.State, new SelectList(ViewBag.StateList, "StateId", "StateName"), "Select state", new { @class = "form-control", @onchange="FillCity()" }) function FillCity() { var stateId = $(''#State'').val(); $.ajax({ url: ''/Employees/FillCity'', type: "GET", dataType: "JSON", data: { State: stateId}, success: function (cities) { $("#City").html(""); // clear before appending new list $.each(cities, function (i, city) { $("#City").append( $(''<option></option>'').val(city.CityId).html(city.CityName)); }); } }); }