[英]how to update view with list of items in asp.net MVC
我有一个显示项目列表的视图,它具有搜索功能。 用户首次显示页面时,页面将显示所有项目。
如果他们在搜索框中输入文字并点击“提交”,则该页面会调用一个操作,该操作从数据库中检索要在页面上显示的新项目列表。
这是我的完整控制器。 最后一行是我不确定如何传递参数的地方,即使这是正确的解决方法。
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?
}
只是关于编码标准的一个旁注: ViewModel
不是一个好名字,我建议将此类重命名为SearchQueryViewModel
为什么要使用HttpPost
作为Search
方法?
我们使用HttpPost
将数据发送到服务器,并且通常我们要保留这些数据...我们还可以使用HttpGet
使用URL中的QueryString
将数据发送到服务器。
它取决于您的应用程序,但是通常最好将查询参数发送到QueryString
而不要以表单形式发布它们。 原因是:
如果您使用QueryString
,那么您的网址将如下所示:
www.myDomain/search?Item1=xyz&Item2=abc
这意味着您的用户可以复制上面的URL并粘贴到电子邮件中,然后将其发送给他的朋友...朋友可以单击上面的URL,他会看到相同的结果。
但是,当前您无法执行此操作,您的URL始终为: www.myDomain/search
,并且搜索参数正在通过表单传递。
同样,它取决于您的应用程序,但是如果您想更改代码,它将如下所示:
// remove [HttpPost] and use HttpGet request
public IActionResult Search(SearchQueryViewModel searchQuery)
{
// do youe search and get the result
var searchResult = MySearchService.Search(searchQuery);
// here DisplaySearchResult is the name of the view which displays the search result
return View(searchResult, "DisplaySearchResult")
}
另外,您的Index
操作方法对我而言似乎不正确...在MVC中,Controller会构建模型,然后将此模型传递给View。 如果执行Index
操作,则将searchResults
传递给Index
方法...您已经在另一个控制器中构建了搜索结果,应该将它们传递给View而不是另一个控制器。 您当前的Index
方法本质上是一个映射器,对我而言似乎不正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.