Попытка применить несколько независимых фильтров к запросу LINQ - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь создать запрос LINQ, который возвращает либо все результаты, либо отфильтрованный результат, либо список результатов на основе нескольких полей ввода. Однако в настоящее время я не могу получить значение из 2-го поля ввода, где я пытаюсь ввести номер социального страхования и использовать его в качестве параметра фильтрации. Каждый раз, когда я пытаюсь запустить фильтр, мне показывают, что ssnString является нулем.

Контроллер "Получить" Метод:

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-фильтра задано, то оно используется в качестве строки фильтрации. Как уже упоминалось, в настоящее время я не вижу значения для ssnFilter, передаваемого в контроллер и в запрос, но nameFilter, кажется, работает отлично.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 01 июля 2019

Чтобы здесь работала привязка модели, вам необходимо убедиться, что имя элемента управления 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)

Тогда связующее для модели должно соответствовать ему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...