2015-01-30 1 views
2

Это мой взгляд модель:Как создать метод расширения HtmlHelper, который будет связывать в IEnumerable <T> к столу

public class TaskViewModel{ 
    public int TaskID{get;set;} 
    public IEnumerable<TaskExecutor> Executors{get;set;} 
} 

public class TaskExecutor{ 
    public int ExecutorID{get;set;} 
    public string LastName{get;set;} 
    public string FirstName{get;set;} 
} 

На мой взгляд, я сделал что-то вроде этого:

<table> 
@foreach(var item in Model.Executors) 
    { 
     <tr> 
     <td>item.ExecutorID</td> 
     <td>@string.Format("{0} {1}",item.FirstName,item.LastName)</td> 
     </tr> 
    } 
</table> 

сейчас , при загрузке представления проблем не будет, но мне может потребоваться отредактировать таблицу, и я хочу, чтобы изменения сохранялись при отправке формы. Единственный способ, которым я могу думать, это метод расширения HtmlHelper, который будет правильно привязывать IEnumerable к таблице, но я не знаю, как это сделать. Я был бы рад увидеть какой-то код. Или есть ли другой способ достичь этого?

+0

Что вы подразумеваете под «Мне, возможно, потребуется отредактировать таблицу, и я хочу, чтобы изменения сохранялись при отправке формы»? Вы говорите об изменении значений в таблице и сохраняете эти изменения между последующими запросами? –

+1

Вам может быть интересно [эта статья] (http://www.codeproject.com/Articles/774228/MVC-Html-Table-Helper-Part-Display-Tables) –

+0

Извините, @ChrisPratt, у меня были проблемы с Интернетом. Да, я имею в виду. –

ответ

3

Одним из вариантов может быть следующим:

namespace System.Web.Mvc 
{ 
    public static class ExecutorsExtensions 
    { 
     public static MvcHtmlString Executors(this HtmlHelper helper, List<TaskExecutor> executors) 
     { 
      var sb = new StringBuilder(); 
      sb.Append("<table>"); 
      for (var i = 0; i < executors.Count; i++) 
      { 
       sb.Append("<tr>"); 
       sb.Append(string.Format("<td><input name=\"Executors[{0}].FirstName\" value=\"{1}\"></td>", i, executors[i].FirstName)); 

       // add other cells here     
       sb.Append("<tr>"); 
      } 
      sb.Append("</table>"); 

      return new MvcHtmlString(sb.ToString()); 

     } 
    } 
} 

Использование

@Html.Executors(Model.Executors) 

Пожалуйста, обратите внимание, вы должны сделать Executors List<TaskExecutor> для индексации, чтобы работать должным образом.

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

Вы также можете использовать Html.TextBox или Html.TextBoxFor для генерации входов, если необходимо.

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

  • Нет связанных вопросов^_^