es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener el valor seleccionado de un desplegable en la clase controladora con ASP.NET Core 2.2 MVC.

Tengo este marcado HTML:

<p>
    Buscar por columna:
    @using (Html.BeginForm("getSelectedValue", "Index", FormMethod.Post, new { enctype = "application/x-www-form-urlencoded" })) 
    {

        @Html.DropDownList("ddlFilterColumns", new List<selectlistitem>
        {
        new SelectListItem { Text = "Seleccionar columna", Value = "1", Selected=true},
        new SelectListItem { Text = "Alias", Value = "2"},
        new SelectListItem { Text = "Nombre del departamento", Value = "3"}
        }, "") 
    <span> Buscar :</span> @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Buscar">
    }
</selectlistitem></p>

y este es mi código del controlador:

[HttpPost]
public string getSelectedValue()
{
    // esto obtendrá el valor seleccionado
    var selectedValue = Request.Form["ddlFilterColumns"].ToString(); 
    return selectedValue;
}

Cuando la página se redirige a la página del departamento, obtengo un error:

InvalidOperationException: Tipo de contenido incorrecto: Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()

Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest.get_Form()

EF_Crud_Samples.Controllers.DepartmentsController.getSelectedValue() en DepartmentsController.cs
var selectedValue = Request.Form[“ddlFilterColumns”].ToString();

EF_Crud_Samples.Controllers.DepartmentsController.SortDepartmentData(List depts, string sortField, string currentSortField, string currentSortOrder) en DepartmentsController.cs
+ switch(getSelectedValue().ToString())
EF_Crud_Samples.Controllers.DepartmentsController.Index(string sortField, string currentSortField, string currentSortOrder, string currentFilter, string SearchString, Nullable pageNo) en DepartmentsController.cs

Por favor, ayúdame con esta situación.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el tipo de contenido que se está enviando al servidor es incorrecto.

    Para solucionar este problema, puedes intentar cambiar el atributo “enctype” en el formulario HTML a “multipart/form-data” en lugar de “application/x-www-form-urlencoded”, de la siguiente manera:

    @using (Html.BeginForm("getSelectedValue", "Index", FormMethod.Post, new { enctype = "multipart/form-data" }))
    

    Alternativamente, puedes intentar acceder a los datos del formulario utilizando un objeto de modelo en el método del controlador en lugar de acceder directamente a la colección Request.Form. Aquí tienes un ejemplo:

    [HttpPost]
    public string getSelectedValue(SelectedValueViewModel model)
    {
        var selectedValue = model.SelectedValue;
        return selectedValue;
    }
    

    Donde SelectedValueViewModel es un modelo de vista simple que contiene una propiedad para el valor seleccionado de la lista desplegable:

    public class SelectedValueViewModel
    {
        public string SelectedValue { get; set; }
    }
    

    Entonces, en el formulario HTML, cambiarías el código para usar un objeto de modelo de la siguiente manera:

    @model SelectedValueViewModel
    
    ...
    
    @using (Html.BeginForm("getSelectedValue", "Index", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.DropDownListFor(m => m.SelectedValue, new List<selectlistitem>
        {
            new SelectListItem { Text = "Seleccione una columna", Value = "1", Selected = true },
            new SelectListItem { Text = "Alias", Value = "2" },
            new SelectListItem { Text = "Nombre del departamento", Value = "3" }
        })
    
        <span>Buscar:</span> @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Buscar">
    }</selectlistitem>
    

Comments are closed.