поиск по строке запроса в asp.net mvc - PullRequest
2 голосов
/ 03 января 2012

У меня есть форма в моем представлении asp.net mvc следующим образом:

 <%using (Html.BeginForm("SearchBorrowed", "Admin", FormMethod.Get))
          { %>
        <%: Html.TextBox("searchTerm", Request.QueryString["searchterm"])%>
        <input type="submit" value="Search" />
        <br />
        Is Returned :
        <%:Html.CheckBox("IsReturned")%>
        <%} %>

и вот действие SearchBorrowed:

public ActionResult SearchBorrowed(bool IsReturned=false, string searchTerm = null)
        {
            IEnumerable<BorrwoinfInfo> bs;

            //...Get from repository

            return View(bs.ToList());

        }

и, наконец, настройки маршрутизации:

  routes.MapRoute(
            "SearchBorrowed", // Route name
            "{controller}/{action}/{*searchTerm}", // URL with parameters
            new
            {
                controller = "Admin",
                action = "SearchBorrowed",

                searchTerm = UrlParameter.Optional
            } // Parameter defaults

когда я отправляю форму без галочки 'IsReturned', он возвращает результат, и URL получает следующее:

... / SearchBorrowed? SEARCHTERM = & IsReturned = ложь

Но когда я проверяю флажок IsReturned ', URL-адреса выглядят так:

... / SearchBorrowed? SEARCHTERM = s & IsReturned = истина & IsReturned = ложь

Почему в приведенном выше URL есть два IsReturned?!

Как я могу это исправить?

1 Ответ

2 голосов
/ 03 января 2012

Почему в приведенном выше URL есть два IsReturned?!

Поскольку помощник Html.CheckBox создает дополнительное скрытое поле ввода с тем же именем, что и у флажка. Если вы посмотрите на сгенерированный HTML, вы увидите, что помощник сгенерировал следующие 2 поля ввода:

<input type="checkbox" name="IsReturned" id="IsReturned" value="true" checked="checked" />
<input type="hidden" name="IsReturned" id="IsReturned" value="false" />

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

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

...