Каков наилучший способ разрешить использование нескольких кнопок в форме ASP.NET MVC? - PullRequest
3 голосов
/ 18 декабря 2008

У меня такое чувство, что я слишком "вебформ" с этим, но я все равно спрошу. У меня есть форма в проекте ASP.NET MVC, которая имеет несколько полей ввода и две кнопки на нем. Одна кнопка используется для «фильтрации» одного из списков. Другой используется для отправки формы. Мой взгляд выглядит примерно так:

<%using (Html.BeginForm())
  {%>
   <%=Html.TextBox("SearchItems") %>
   <input type="submit" name="Command" value="Find" />
   <%=Html.ListBox("SelectedItems", new MultiSelectList(model.AvailableItems,"Id", "Name", model.SelectedItems))%>
   //Some other form fields.
   <input type="submit" name="Command" value="Send" />
    <%} %>

Мое действие выглядит примерно так:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index([Bind(Prefix = "")]SendMessageRequest model)
    {
        if (model.Command == "Find")
            return SearchItems(model);
        if (model.Command == "Send")
            return Send(model);
        throw new Exception("Invalid command.");
    }

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

Так как это для Pocket IE, я также довольно ограничен в том, что я могу сделать с JavaScript. Ajax отсутствует, но я мог бы установить скрытое поле с помощью кнопок onClick.

Итак, мой вопрос: как лучше всего разрешить одну форму с несколькими кнопками в представлении MVC? Или я должен как-то разбивать свое мнение на несколько форм?

Ответы [ 4 ]

5 голосов
/ 18 декабря 2008

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

(c => c.Search (), FormMethod.Get); {%> найти (c => c.Send (), FormMethod.Post); {%> послать

или что-то в этом роде. Тогда в контроллере у вас есть 2 соответствующих действия. Это означает, что ответственность снята. С MVC вы можете иметь несколько форм, в отличие от веб-форм. Так что вы можете вырваться на свободу!

1 голос
/ 30 июня 2009

Вот очень хорошая статья, описывающая все альтернативы для форм с несколькими кнопками: http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

Лично я согласен с Odd, действия jQuery onclick кажутся лучшим вариантом.

1 голос
/ 18 декабря 2008

Нет необходимости в скрытом поле, вы можете установить действие формы для события нажатия кнопки.

JavaScript (в jQuery) выглядит примерно так:

$("#myForm").attr("action", "mvcaction");
$("#myForm").submit();

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

РЕДАКТИРОВАТЬ: Не уверен, что Pocket PC вообще обрабатывает JQuery, хотя, если это не так, то должно быть возможно сделать это в обычном JavaScript.

0 голосов
/ 07 сентября 2009

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

Мы обошли его, используя метод $ .post () из библиотеки jQuery.

$("#update").click(function() {
                $.post("/Register", { name: $("#firstName").val(),
                    surname: $("#surname").val(),
                    username: $("#email").val(),
                    accountName: $("#accountName").val(),
                    password: $("#password").val()
                },
                  function(data) {
                      alert(data);
                  });
            });

И кнопка отмены отправила меньше значений обратно.

$("#cancel").click(function() {
                $.post("/Cancel", { username: $("#email").val(),
                    password: $("#password").val()
                },
                  function(data) {
                      alert(data);
                  });
            }); 

Хорошо, опять же, это зависит от того, включен ли javascript, но если вы собираетесь отключить javascript, вам лучше не пользоваться Интернетом (и моим приложением, потому что это будет тяжело для js).

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