Estoy tratando de crear una consulta LINQ que devuelva todos los resultados, o un resultado filtrado o una lista de resultados basados en varios cuadros de entrada. Sin embargo, actualmente no puedo obtener un valor que proviene del segundo cuadro de entrada, donde estoy tratando de ingresar un número de seguro social y usarlo como un parámetro de filtrado. Cada vez que trato de ejecutar el filtro, me muestro que el SSnstring es nulo.

Método del controlador "Obtener":

public async Task<IActionResult> Index(string sortOrder, string searchString, string ssnString)
{
    ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
    ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date";
    ViewData["nameFilter"] = searchString;
    ViewData["ssnFilter"] = ssnString;

    var members = from m in _context.Member
                  select m;

    if (!String.IsNullOrEmpty(searchString))
    {
        members = members.Where(s => s.LastName.Contains(searchString));
    }

    if (!String.IsNullOrEmpty(ssnString))
    {
        members = members.Where(s => s.SSN.Equals(ssnString));
    }

Vista de índice:

<form asp-action="Index" method="get">
    <div class="form-actions no-color">
        <p>
            Filter by last name: <input type="text" name="SearchString" value="@ViewData["nameFilter"]" /> |
            @*<input type="submit" value="Search" class="btn btn-info" /> |*@
            Find by SSN: <input type="number" name="SSNSearchString" value="@ViewData["ssnFilter"]" />
            <input type="submit" value="Search" class="btn btn-info" /> |
            <a asp-action="Index">Back To Full Index</a>
        </p>
    </div>
</form>

Me gustaría que se devuelvan todos los resultados si no se recibe un cuadro de entrada, y si se usa un valor del nombre o el filtro SSN, se usa como la cadena de filtración. Como se mencionó, actualmente no veo un valor para que el SSNFilter se pase al controlador y a la consulta, pero el nombre de nombre parece funcionar perfectamente.

¡Gracias por su asistencia!

0
Charles Belcher 1 jul. 2019 a las 20:51

1 respuesta

La mejor respuesta

Para que la fijación de modelos funcione aquí, debe asegurarse de que el nombre del control HTML coincida con el parámetro de entrada en su método de acción.

Su casilla de entrada se llama SSNSearchString:

<input type="number" name="SSNSearchString" value="@ViewData["ssnFilter"]" />

Pero en su método de acción declara un parámetro como ssnString:

Index(string sortOrder, string searchString, string ssnString)

Si lo cambia a:

Index(string sortOrder, string searchString, string ssnSearchString)

Luego, la carpeta modelo debe poder coincidir.

0
mclark1129 1 jul. 2019 a las 18:17