尝试在LINQ查询上应用多个独立过滤器

时间:2019-07-01 17:51:02

标签: c# asp.net-mvc linq

我正在尝试创建一个LINQ查询,该查询返回所有结果,或者基于多个输入框的过滤结果或结果列表。但是,我目前似乎无法从第二个输入框中获得一个值,在此我试图输入一个社会保险号并将其用作过滤参数。每当我尝试运行过滤器时,都会看到ssnString为null。

控制器“获取”方法:

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));
    }

索引视图:

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

如果两个输入框都没有指定值,或者名称或ssn Filter框都指定了值,我希望返回所有结果,然后将其用作过滤字符串。如前所述,我目前看不到ssnFilter的值传递给控制器​​和查询,但nameFilter似乎运行得很好。

谢谢您的协助!

1 个答案:

答案 0 :(得分:0)

要使模型绑定在这里起作用,您需要确保HTML控件的名称与您的操作方法中的输入参数匹配。

您的输入框称为SSNSearchString

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

但是在您的操作方法中,您将参数声明为ssnString

Index(string sortOrder, string searchString, string ssnString)

如果将其更改为:

Index(string sortOrder, string searchString, string ssnSearchString)

然后模型联编程序应该能够将其匹配。