C # ASP.NET MVC 2 базовая маршрутизация - PullRequest
1 голос
/ 04 августа 2011

Я довольно новичок в ASP.NET и C #, и у меня возникли некоторые проблемы с маршрутизацией.Он надеялся, что кто-то будет так любезен, чтобы помочь мне.

Пользователь должен указать 3 параметра (string, bool, bool).Итак, у меня есть небольшая форма на моей странице индекса:

  <% using (Html.BeginForm("search", "Home")) { %>
        <label >Name: </label><br />
        <input type="text" id='ml' name='ml' /><br />
        <label >Sort members alphabethic? </label> <input type="checkbox" id='sortalph' name='sortalph' /><br />
        <label >Number the list? </label><input type="checkbox" id='number' name='number' /><br />
        <input type="submit" value='Submit'/>
   <% } %>

Global.asax.cs настроен так:

  routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}", // URL with parameters
            new { controller = "Home", action = "Index"} // Parameter defaults
        );
        routes.MapRoute(
         "Search", // Route name
         "{controller}/{action}/{ml}/{sortalph}/{number}", // URL with parameters
         new { controller = "Docent", action = "Search" } // Parameter defaults
     );

Начало метода Search в моем HomeController выглядит так:

public ActionResult Search(string ml,  bool? sortalph,  bool? number)
{
    if (sortalph == null)
    {
        sortalph = false;
    }
    if (number == null)
    {
        number = false;
    }

Когда я отлаживаю sortalph и number всегда null.Я не уверен почему.

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Проблема строго связана с двумя факторами:

  • Ваши параметры bool в методе действия не должны быть обнуляемыми.Используйте bool, а не bool?
  • Ваши флажки в html должны иметь value="true", поэтому при их проверке будет отправлено правильное значение и свойство получит правильное значение.

Кроме того, вы можете использовать вспомогательные html-методы вместо простого html для создания вашей формы.В вашем html есть много недостатков, например, в ярлыках отсутствует атрибут for и т. Д.

Кроме того, поскольку это форма поиска, вы должны использовать метод HTTP GET, чтобы сделать результаты поиска индексируемыми и закладками, ноне указав его, и перегрузка по умолчанию BeginForm отобразит тег формы, используя метод HTTP POST.

1 голос
/ 04 августа 2011

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

Итак, если браузер выполняет GET, он фактически формирует URL /home/search?ml=[whatever]&sortalph=[whatever]&number=[whatever]. MVC автоматически сопоставляет параметры по имени с этими значениями из строки запроса.

Если вы закомментируете маршрут, вы обнаружите, что он все начнет работать.

...