ASP.Net MVC фреймворк и привязка данных - PullRequest
3 голосов
/ 11 ноября 2008

У меня возникли проблемы с пониманием некоторых концепций, лежащих в основе MVC. Я делаю очень простое приложение, которое классифицирует продукты.

На экране «Создание» будет просто использоваться раскрывающийся список с указанием списка категорий, названия продукта и отправки.

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

(Извините, мой вопрос чрезвычайно дурацкий, но, к сожалению, ресурсы на MVC невелики, и примеры часто ломаются из-за ранних изменений)

Ответы [ 2 ]

4 голосов
/ 11 ноября 2008

Я не уверен, что полностью понял, но если на вашей странице отображается один продукт, и единственный пользовательский ввод - это просто выбрать категорию из выпадающего списка, я могу немного помочь (но я нуб тоже!).

Ссылка на эту страницу:

http://weblogs.asp.net/scottgu/archive/2008/05/27/asp-net-mvc-preview-3-release.aspx

Вы захотите создать список SelectList в вашем контроллере для категорий (возможно, ссылаясь на идентификатор и отображая имя). Затем вы добавляете этот список выбора в свои ViewData. В качестве альтернативы вы можете установить это как часть вашего ViewData.Model и ссылаться на него из вашего View.

По вашему мнению, вы используете HtmlHelper для DropDownList, который принимает SelectList в качестве параметра.

Эта ссылка выше должна передать это намного лучше, это просто краткое резюме. Эта ссылка для предварительного просмотра 3, но я думаю, что это все еще должно применяться.

0 голосов
/ 11 ноября 2008

Ваши модели извлекают данные, ваш докладчик организует данные для представления, а элементы управления представлением связывают вашу модель с элементами пользовательского интерфейса. Например, вот модель для LogEvent:

public class LogEvent{
  public string Title {get;set;}
  public string Date {get;set;}
  public string Message {get;set;}

  // this is for example only; you would most likely bind directly against the host.GetAllLogs() result
  public static IEnumerable<LogEvent> RetrieveAllLogs(ILogProvider host){
    return from x in host.GetAllLogs() select new LogEvent(x.LogTitle, x.Date, x.Message);
  }

Вот контроллер, который обрабатывает запрос пользователя на просмотр всех журналов:

[DependencyPropertyLolJk]
protected ILogProvider MyLogProvider {get;set;} // set by DI

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Logs()
{
    return View("Logs", LogEvent.GetAllLogs(MyLogProvider).OrderByDescending(x => x.Date));
}

А вот вид и как он привязан к модели:

<!-- header left out for brevity -->
<table>
    <thead>
        <tr>
            <th>
                Date
            </th>
            <th>
                Title
            </th>
            <th>
                Message
            </th>
        </tr>
    </thead>
    <% foreach(var log in ViewData.Model) %>
    <tr>
<td><%= log.Date %></td>
<td><%= log.Title %></td>
<td><%= log.Message %></td>
    </tr>
    <% }; %>
</table>

<!-- ... -->

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

Когда ваш пользовательский интерфейс становится сложным, проще всего создать расширения для класса HtmlHelper. Вот два примера, которые показывают, как это может сократить сложность вашего пользовательского интерфейса: элементы управления HtmlHelper GridView и Pager . Я создал аналогичные вспомогательные методы, и довольно удивительно, как вы можете смешивать html и встроенный код в лямбдах. Теперь, если дизайнер смог прилично отформатировать этот смешанный код / ​​разметку ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...