我正在尝试创建一个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似乎运行得很好。
谢谢您的协助!
答案 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)
然后模型联编程序应该能够将其匹配。