gpt4 book ai didi

c# - 如何在 asp.net mvc 4 中创建具有局部 View 的搜索功能

转载 作者:可可西里 更新时间:2023-11-01 08:55:14 24 4
gpt4 key购买 nike

我首先使用带有 Entity Framework 模型的 ASP.NET MVC 4。

在我的“Masterpage.cshtml”中,我想要一个包含文本框和按钮的局部 View 。

搜索正在寻找项目标题,如果文本包含项目标题,它应该显示这些项目。

提交文本时,@renderbody() 应该显示包含项目的 View 。

我的问题是我怎样才能以好的方式做到这一点?什么是简单好用的方法?

到目前为止,我已经这样做了:

在我的存储库中创建了一个执行搜索功能的方法:

public List<News> Search(string query)
{

var queryz = db.News.Where(x => x.Title.Contains(query));
return queryz.ToList();
}

现在谈到我的 Searchcontroller 时,我有点不知道如何做到这一点。因为一个 actionresult 需要是具有字符串查询参数的 partialview 而另一个包含将显示项目的 View ?

我现在所做的是让整个过程在同一个 actionresult 中:

 Repository rep = new Repository();
[HttpPost]
public ActionResult Search(string query)
{
var searchlist = rep.Search(query);

var model = new ItemViewModel()
{
NewsList = new List<NewsViewModel>()
};

foreach (var NewsItems in searchlist)
{
FillProductToModel(model, NewsItems);
}

return View(model);
}

private void FillProductToModel(ItemViewModel model, News news)
{
var productViewModel = new NewsViewModel
{

Description = news.Description,
NewsId = news.Id,
Title = news.Title,
link = news.Link,
Imageurl = news.Image,
PubDate = news.Date,
};
model.NewsList.Add(productViewModel);
}

非常感谢任何形式的帮助!

最佳答案

您可以使用以下方法:

Index.cshtml

有一个 DIV 调用搜索 Controller 操作,另一个 DIV 将显示结果。

<div id="search-form">
@Html.Action("Search", "Home"); // GET action in controller that displays form
</div>
<div id="search-results">
</div>

_SearchFormPartial.cshtml

创建一个包含搜索表单的局部 View 。您可以使用 Ajax.BeginForm,这样当用户搜索时,结果将通过 AJAX 显示在 Index.cshtml 的 search-results DIV 中。 UpdateTargetId 指定我们要将搜索结果传递给 search-results DIV。

@using (Ajax.BeginForm("Search", "Home", FormMethod.Post,
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
UpdateTargetId = "search-results"
}))
{
<div>
@Html.TextBox("query")
<input type="submit" value="Search" />
</div>
}

Controller

在您的 Controller 中,您需要一个操作来显示表单(上面的部分 View ),另一个操作来处​​理搜索查询并重新调整另一个将显示结果的部分 View :

[HttpGet]
public ActionResult Search()
{
return PartialView("_SearchFormPartial");
}

[HttpPost]
public ActionResult Search(string query)
{
if(query != null)
{
try
{
var searchlist = rep.Search(query);

var model = new ItemViewModel()
{
NewsList = new List<NewsViewModel>()
};

return PartialView("_SearchResultsPartial", model);
}
catch (Exception e)
{
// handle exception
}
}
return PartialView("Error");
}

_SearchResultsPartial.cshtml

此部分将显示结果。它是采用 ItemViewModel 的强类型。

@model Namespace.ViewModels.ItemViewModel
@if (Model.SearchResults.Count == 0)
{
<h3 class="text-error">No items matched your search query!</h3>
}
else
{
foreach (var result in Model.NewsList)
{
// display search results
}
}

关于c# - 如何在 asp.net mvc 4 中创建具有局部 View 的搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16637418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com