创建强类型视图



我正在尝试创建一个搜索页面,它根据用户名搜索用户的详细信息。我的问题是我无法为搜索框创建强类型文本框。我创建了一个模型视图,尽管我无法解决我的问题。我的视图甚至不能正确编译,我猜我与绑定视图使其强类型的模型出错了。我希望有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>

方法之一是创建一个包装器类

public class UserSearchViewModel
{
     public string UserName {get;set;}
     public string PhoneNumber {get;set;}
     public IEnumerable<User> Users {get;set;}
}

模型将是UserSearchViewModel而不是IEnumerable,你的foreach将循环通过模型。用户代替模型

这篇文章和这篇文章详细介绍了ViewModels(一个专为视图提供数据而存在的任意类)与直接在视图中使用实体/数据库模型的区别。

在form元素中,使用

@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>

注意,集合不需要包含任何项,

最新更新