C# 如何在视图中返回搜索结果?
我正在使用asp.NETMVC4、simplemembership和EF 实际上,我有这个代码来搜索数据库中的用户 家庭控制器:C# 如何在视图中返回搜索结果?,c#,asp.net-mvc,entity-framework,search,C#,Asp.net Mvc,Entity Framework,Search,我正在使用asp.NETMVC4、simplemembership和EF 实际上,我有这个代码来搜索数据库中的用户 家庭控制器: private UsersContext db = new UsersContext(); public ActionResult Index(string searchUser) { var user = from m in db.UserProfiles
private UsersContext db = new UsersContext();
public ActionResult Index(string searchUser)
{
var user = from m in db.UserProfiles
select m;
if (!String.IsNullOrEmpty(searchUser))
{
user = user.Where(s => s.UserName.Contains(searchUser));
}
return View(user);
}
索引视图:
<div id="searchUser">
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<p>
@Html.TextBox("searchUser")
<input type="submit" value="Chercher" />
</p>
}
</div>
/********** PART 1 ***********/
@{
var db = new UsersContext();
var list = db.UserProfiles.ToList();
foreach (var item in list)
{
<table>
<tr>
<td>
@Html.DisplayFor(m => item.UserName)
</td>
</tr>
</table>
}
}
这里的第一部分已经过时了。相反,我想返回我搜索的用户的名字,如果他存在,否则我想显示一条消息说他不存在
实际上,我的请求似乎有效,但它在视图中没有返回任何内容,是否有人知道我如何解决此问题
谢谢。试试这样的东西 在控制器上,始终应为视图返回相同的类型
private UsersContext db = new UsersContext();
public ActionResult Index(string searchUser = "")
{
IEnumerable<User> result;
if (!String.IsNullOrEmpty(searchUser))
{
var userFound = (from m in db.UserProfiles
where m.UserName.Constains(searchUser)
select m).FirstOrDefault(); // to take the first user you have found, but it is still an List.
result = new List<User>() { userFound };
}
else
{
result = (from m in db.UserProfiles
select m).ToList();
}
return View(result); // return the type for your view
}
并在操作上键入具有相同类型的视图,然后读取它以显示一个表
// type your view with IEnumerable<User>
@model IEnumerable<User>
<div id="searchUserForm">
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<p>
@Html.TextBox("searchUser")
<input type="submit" value="Chercher" />
</p>
}
</div>
@if (Model.Any()) // Model is an IEnumerable<User>
{
<table>
<tr>
<th>UserName</th>
</tr>
foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.UserName)
</td>
</tr>
}
</table>
}
else
{
<p> No users to display.</p>
}
nothink如果用户不存在Hanks,它将返回我搜索的用户,但有一种方法可以在我搜索一个用户时,不在foreach循环中显示所有用户,而只显示搜索结果?或者仅仅使用ajax就可以了?谢谢你纠正我的英语:我试过@Html.DisplayForModelModel.Selectm=>m.UserName,它返回了一个数字,我一直在找Chris,看看我编辑的代码。在本例中,如果要显示找到的第一条记录,请使用FirstOrDefault方法,您将只获得一条记录。在此之后,添加一个具体列表,因为您的视图正在等待列表,而不是单个用户。在控制器的else条件下,我得到的结果为:result=new list.DefaultIfEmpty,这样,只有在搜索用户时才会显示某些内容。现在,如果我的用户不存在,视图中就不会显示我的else条件。为什么?我真的不明白我的ifModel是什么意思。任何条件都意味着…你的模型是用IEnumerable right键入的,所以你的动作方法的每个输出都应该返回这个类型来呈现这个视图,这是一个MVC规则,你不能更改它,你也可以返回null,但这不是一件好事。Any是IEnumerable的一个Excelion方法,如果集合中有记录,则返回true。