我在 ASP.net MVC 应用程序中工作,我有一个产品表,如屏幕截图所示:
我希望能够过滤该产品表,并且我希望通过查询字符串参数(作为 a GET
)进行过滤,以便可以共享 URL。
页面的 ViewModel 是这样的:
public class InventoryReportViewModel
{
public SearchViewModel Search { get; set; } // 2 string props [Type and Term]
public IEnumerable<ProductViewModel> Products { get; set; }
public PaginationViewModel Pagination { get; set; } // 3 int props [currentPage, recordsPerPage, totalRecords]
}
我正在使用 Razor 助手来绘制过滤器输入,如下所示:
@Html.EditorFor(m => m.Search.Term, new { htmlAttributes = new { @class = "form-control" } })
而且我已经设置了我的表单来使用GET
:
@using (Html.BeginForm("Inventory", "Report", FormMethod.Get))
{
// form elements
}
我ReportController.cs
有以下与我的问题相关的方法:
public ActionResult Inventory(string SearchTerm, string SearchType, int page = 1)
{
var viewModel = _reportService.GetProducts(page, SearchTerm, SearchType);
return View(viewModel);
}
当我传递搜索词并单击过滤结果按钮时,我确实到达了上面的控制器方法,但是SearchTerm
和SearchType
是null
.
我知道如何“破解”它来工作,例如,如果我这样做:
<input type="text" name="SearchTerm" class="form-control"/>
那么我输入的搜索词会被Controller拾取,但是没有其他方法了吗?
因为你已经viewmodel
为Search
public SearchViewModel Search { get; set; }
你只需要像这样将它传递给控制器
public ActionResult Inventory(SearchViewModel Search, int page = 1
{
var viewModel = _reportService.GetProducts(page, Search.Term, Search.Type);
return View(viewModel);
}
你得到的null
是因为textboxes
被命名为Search.Term
这就是它与参数不匹配的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句