2013-07-25 4 views
1

Я новичок в MVC и изучаю MVC. Теперь я не хочу использовать расширение сетки, вместо этого хочу создать табличный интерфейс только по таблице HTML. Поэтому я искал код и нашел подсказку.Как создать таблицу html из класса модели

Этот код не является полным кодом. Вот что я получил.

<% if (Model.Count() > 0) 
{ %> 
    <table width="35%"> 
<thead><tr><th>Species</th><th>Length</th></tr></thead> 
    <% foreach (var item in Model) 
    { %> 
    <tr> 
     <td><%= item.FishSpecies%></td> 
     <td align="center"><%=item.Length%></td> 
    </tr> 

<% } %> 
    </table> 
<% } 
else 
{ %> 
No fish collected. 
<%} %> 

Проблема в том, что я не в состоянии представить себе, как класс модель должна выглядеть и как она населена от контроллера. Viewbag не используется в коде, а генерирует таблицу непосредственно из класса модели.

Так может ли кто-нибудь написать небольшой полный код для меня, просто чтобы создать таблицу HTML и заполнить модель напрямую, не используя viewbag?

Нужен код модели, контроллера и просмотра.

+0

Какую версию MVC вы используете? –

+0

О, действительно. Во-первых, это не полный код. Каковы были ваши усилия, чтобы написать контроллер и действие? И модель? – OzrenTkalcecKrznaric

ответ

0

Если вы хотите перебрать модель и создать таблицу, в первую очередь изменить @model вашей точки зрения, как это:

@model IEnumerable<myPrj.Models.EntityName> 

Затем вы должны изменить способ действий для питания элементов модели к вашему вид:

public ActionResult Index() 
{    
    return View(db.EntityNames.ToList()); 
} 

и, наконец, итерация модели и создать таблицу:

<table id="tblNews"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.Property1) 
    </th> 

    // ... 

    <th> 
     @Html.DisplayNameFor(model => model.Propertyn) 
    </th>   
</tr> 

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Property1) 
    </td> 

    // ... 

    <td> 
     @Html.DisplayFor(modelItem => item.Propertyn) 
    </td>   
</tr> 
} 
</table> 

и о модели? Модель не что иное, как класс с некоторыми свойствами:

public class MyModel 
{ 
    [Display(Name = "Property 1")] 
    [Required(ErrorMessage = "Property cannot be empty")] 
    public int Property1 { get; set; } 

    // ... 

    [Display(Name = "Property n")] 
    [Required(ErrorMessage = "Property cannot be empty")] 
    public string Propertyn { get; set; }   
} 
+0

, если мы сможем напрямую заполнить модель у контроллера и использовать эту модель для заполнения любого элемента управления, то почему нужно использовать viewbag? любая идея, когда работа может быть выполнена непосредственно с использованием модели, то почему viewbag нужно использовать. – Thomas

+0

расскажите мне о DisplayNameFor & DisplayFor вспомогательный метод. какой html-тег он генерирует? он генерирует ярлык или ? – Thomas

+0

Я сам вообще не использую viewbag, а отправляю некоторые очень простые данные, такие как флаг или небольшая строка для представления. Еще одно распространенное использование viewbag - отправить коллекцию SelectList для просмотра, чтобы заполнить DropDownList. – AminSaghi

1

Ваша модель на самом деле должна быть IEnumerable<Model>. Таким образом, вы могли бы иметь модель:

public class Model 
{ 
    public string FishSpecies { get; set; } 
    public int Length { get; set; } 

    public static IEnumerable<Model> Load() { ... } 
} 

, а затем в действии вашего контроллера:

var list = Model.Load(); 
return View(list); 

, а затем в окне вам нужно определить модель на самом верху:

@model System.Collections.IEnumerable<My.Namespace.Model> 

Теперь эти две линии не будут работать:

<td><%= item.FishSpecies%></td> 
<td align="center"><%=item.Length%></td> 

им нужно что-то еще:

<td>@Html.DisplayFor(m => item.FishSpecies)</td> 
<td>@Html.DisplayFor(m => item.Length)</td> 
+0

что предмет? он не определяется в коде. просто см. этот код @ Html.DisplayFor (m => item.Length) здесь u использовать lambda, так что здесь вы используете m, но на самом деле используете элемент item.Length вместо m.Length? во всяком случае, я не очень хорош в mvc, поэтому я ищу комментарий ура против моего ответа. спасибо – Thomas

+0

, если мы сможем напрямую заполнить модель от контроллера и использовать эту модель для заполнения любого элемента управления, то почему нужно использовать viewbag? любая идея, когда работа может быть выполнена непосредственно с использованием модели, то почему viewbag нужно использовать. – Thomas

+0

@Thomas, чтобы ответить на ваш первый вопрос, 'DisplayFor' требует' Func', поэтому мне нужно отправить 'm' (то есть имя параметра), однако, поскольку вы находитесь в цикле, мне действительно нужно для ссылки на значение 'item'. Вот что это делает. Он отвечает потребностям метода, но использует лексическую область для захвата значения из 'item'. –

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