[英]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.