Реализация форм в ASP.net MVC - PullRequest
       15

Реализация форм в ASP.net MVC

3 голосов
/ 27 января 2009

У меня есть простая форма на странице просмотра, реализованная в виде пользовательского элемента управления, которая выглядит примерно так:

<%=Html.BeginForm("List", "Building", FormMethod.Post) %>

//several fields go here

<%Html.EndForm(); %>

Есть две проблемы, которые я хотел бы решить, во-первых, я хотел бы, чтобы метод контроллера, который получает это, принял параметр типа пользовательского элемента управления. Цель состоит в том, чтобы не помещать все поля формы в список параметров для метода. Метод контроллера в настоящее время выглядит следующим образом:

[AcceptVerbs("Post")]
    public ActionResult List(string capacityAmount)
    {
        ProfilerDataDataContext context = new ProfilerDataDataContext();
        IEnumerable<Building> result = context.Buildings.OrderBy(p => p.SchoolName);
        ViewData["Boroughs"] = new SelectList(Boroughs.BoroughsDropDown());

        return View(result);
    }

Остальные поля в форме будут использоваться для поиска по типу зданий.

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

Во-вторых, меньшая проблема заключается в том, что при отображении страницы тег BeginForm отображает на странице строку «System.Web.Mvc.Form». Как я могу заставить это уйти?

Ответы [ 3 ]

6 голосов
/ 27 января 2009

1) Используйте FormCollection в качестве аргумента:

public ActionResult List(FormCollection searchQuery)

Теперь вы можете выполнять итерацию FormCollection и получать условия поиска по ключу / значению из формы поиска.

2) Удалить "=" из BeginForm:

<% Html.BeginForm("List", "Building", FormMethod.Post) %>

Тем не менее, вы действительно должны использовать , гм ... используя:

<% using (Html.BeginForm("List", "Building", FormMethod.Post)) { %>
<% } %>
0 голосов
/ 28 января 2009

, если кто-то скептически относится ко всему шаблону 'using' с Html.BeginForm - осознайте, что IDE достаточно умен, чтобы соответствовать открытию '{' с окончанием '}', что позволяет очень легко увидеть, где начинается ваша форма и заканчивается.

Также <% Html.EndForm (); %> требуется точка с запятой, которую я не уверен, что мне нравится :)

0 голосов
/ 27 января 2009

Если я правильно понимаю ваш вопрос, вы используете помощник html и создаете входные данные с именем:

<%=Html.TextBox("building.FieldNumber1")%>
<%=Html.TextBox("building.FieldNumber2")%>

Вы должны иметь доступ к данным, используя:

public ActionResult List(Building building)
{
   ...
   var1 = building.FieldNumber1;
   var2 = building.FieldNumber2;
   ...
}

и если ваше действие состоит в том, чтобы сделать две разные вещи в зависимости от того, отправлена ​​ли форма:

public ActionResult List()
{
    //some code here
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult List(Building building)
{
   ...
   var1 = building.FieldNumber1;
   var2 = building.FieldNumber2;
   ...
}
...