我正在尝试创建一个搜索页面,该页面根据用户名搜索用户的详细信息。我的问题是我无法为搜索框创建强类型文本框。我创建了一个模型视图,尽管我无法修复我的问题。我的视图甚至无法正确编译,我猜我错误的模型绑定视图使其强类型。我希望有2个用户名和电话号码的文本框,如果用户在任一文本框中输入任何内容,它应该返回匹配的用户配置文件。
这是视图模型:
public class UserSearchViewModel
{
public string userName { get; set; }
public string phoneNum { get; set; }
public IEnumerable<User> user { get; set; }
}
行动方法:
public ActionResult Search(UserSearchViewModel mod)
{
IEnumerable<User> u1 = null;
u1 = db.Users.Where(p => p.UserName.Contains(mod.userName) || p.PhoneNum.Contains(mod.phoneNum));
return View(u1);
}
查看:
@model HindiMovie.Models.UserSearchViewModel
@using( Html.BeginForm("Search", "User", FormMethod.Get))
{
@Html.TextBox("UserName")
}
<table>
<tr>
<th>@Html.DisplayNameFor(model => model.UserName)</th>
<th>@Html.DisplayNameFor(model => model.FirstName)</th>
<th>@Html.DisplayNameFor(model => model.LastName)</th>
<th>@Html.DisplayNameFor(model => model.PhoneNum)</th>
<th></th>
</tr>
@foreach (var item in Model.user) {
<tr>
<td>@Html.DisplayFor(modelItem => item.FirstName)</td>
<td>@Html.DisplayFor(modelItem => item.LastName)</td>
<td>@Html.DisplayFor(modelItem => item.UserName)</td>
</tr>
}
</table>
答案 0 :(得分:0)
一种方法是创建一个包装类
public class UserSearchViewModel
{
public string UserName {get;set;}
public string PhoneNumber {get;set;}
public IEnumerable<User> Users {get;set;}
}
模型将是UserSearchViewModel而不是IEnumerable,你的foreach将循环通过Model.Users而不是Model。
This和this是一些文章,详细介绍ViewModels(一个专门用于为视图提供数据的任意类)的使用,而不是直接在视图中使用您的Enity / Database模型。
答案 1 :(得分:0)
在表单元素中,使用
@Html.TextBoxFor(m => m.userName )
@Html.TextBoxFor(m => m.phoneNum)
但是您查看不会编译的原因是因为您的模型不包含属性UserName
,FirstName
等,因此您不能在表格标题中使用@Html.DisplayNameFor(m => m.UserName)
。
硬编码
<th>User name</th>
或使用
<th>@Html.DisplayNameFor(m => m.user.FirstOrDefault().UserName)</th>
请注意,该集合不需要包含任何可以使用的项目。