2015-09-15 4 views
-1

Я пытаюсь создать страницу поиска, которая ищет детали пользователя на основе имени пользователя. Моя проблема в том, что я не могу создать строго типизированное текстовое поле для окна поиска. Я создал представление модели, и, несмотря на это, я не могу исправить свою проблему. Мой взгляд не способен даже скомпилировать правильно, я предполагаю, что я ошибаюсь в модели, которая привязывает представление, чтобы он был строго типизирован. Я хочу иметь 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

Путь пойти бы создать класс-оболочку

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 непосредственно в окне просмотра.

+0

Извините, я не понял, что вы объяснили. – Sid

+0

Вместо того, чтобы использовать вашу коллекцию пользователей в качестве модели, вы бы создали еще один класс, в котором была ваша коллекция пользователей и любые другие необходимые вам свойства. –

+0

Я пробовал много, но не смог исправить свою проблему. – Sid

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> 

Обратите внимание, что сбор не должен содержать каких-либо предметов для этой работы.

+0

Он не работает с @ Html.DisplayNameFor (m => m.user [0] .UserName). Я получаю сообщение об ошибке: Невозможно применить индексирование с [] к выражению типа «System.Collections.Generic.IEnumerable ». – Sid

+0

См. Edit для использования, если коллекция 'IEnumerable ' –

Смежные вопросы