【发布时间】:2019-09-01 01:04:42
【问题描述】:
我有一个显示项目列表的视图,它具有搜索功能。 用户第一次显示页面时,页面会显示所有项目。
如果他们在搜索框中输入文本并点击提交,页面会调用一个操作,从数据库中检索要在页面上显示的新项目列表。
这是我的完整控制器。最后一行是我不确定如何传递我的参数以及这是否是正确的方法。
public IActionResult Index(IEnumerable<ItemListingModel> searchResults)
{
var categoryNames = _assets.GetCategoryNames();
var marketNames = _assets.GetMarketCategoryNames();
if (!searchResults.Any())
{
var assetItems = _assets.GetAll();
searchResults = assetItems.Select(result => new ItemListingModel
{
Id = result.Id,
ImageUrl = result.ImageUrl,
Title = result.Title,
Category = result.Category.Name,
Sku = result.Sku,
Location = result.Location,
Available = result.Available,
Notes = result.Notes
});
}
var assetModel = new ItemIndexModel()
{
Items = searchResults,
Categories = categoryNames,
Markets = marketNames
};
var searchForm = new SearchFormModel()
{
SearchQuery = "Enter search query"
};
ViewModel myModel = new ViewModel();
myModel.Item1 = assetModel;
myModel.Item2 = searchForm;
return View(myModel);
}
[HttpPost]
public IActionResult SearchSubmit(ViewModel search)
{
var results = _assets.searchInventoryAssets(search.Item2.SearchQuery, search.Item2.CategoryName, search.Item2.MarketCategoryName, search.Item2.ColumnName, search.Item2.ValueExpression).Select(result => new ItemListingModel
{
Id = result.Id,
ImageUrl = result.ImageUrl,
Title = result.Title,
Category = result.Category.Name,
Sku = result.Sku,
Location = result.Location,
Available = result.Available,
Notes = result.Notes
});
return //update index View with results list from this function, how can I achieve this?
}
【问题讨论】:
-
您可以只使用
return(results)或return(results, "TheNameOfYourView"),但这不是最好的方法。正确的做法是在进行传统 POST 时遵循PRG 模式。 -
在你的情况下,因为它只是一个搜索,所以可能不需要 PRG。
-
返回(结果)是什么意思?您的意思是将我的 searchSubmit 从返回 IActionResult 更改为仅返回列表?
-
对不起,我的意思是
return View(results)或return View(results, "TheNameOfYourView)。 -
知道了!谢谢!。使用 search.Item1 = createItemIndexModel(results);返回视图(“索引”,搜索);
标签: c# asp.net asp.net-mvc