2012-01-03 52 views
1

我在我的asp.net mvc的觀點如下形式:通過搜索查詢字符串在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」複選框, 返回resul t和URL獲取如下:

.../SearchBorrowed搜索關鍵詞= & IsReturned =假

但是當我檢查IsReturned」複選框,網址得到這樣的:?

.../SearchBorrowed?searchterm = s & IsReturned = true & IsReturned = false

爲什麼在上面的url中有兩個IsReturned?

我該如何解決這個問題?

+0

我會推薦使用強類型模型。 – 2012-01-03 16:16:34

+0

這是一個視圖內的搜索表單,它將模型設置爲 'IEnumerable ',所以我無法將複選框綁定到模型上。 如果我想這樣做,我必須使用ViewModel,對嗎? – 2012-01-03 16:35:13

回答

2

爲什麼在上面的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" /> 

這是設計。此幫助程序旨在綁定到視圖模型上的布爾屬性。如果未選中複選框字段,則不會將值發送到服務器,因此如果沒有隱藏字段,您將無法將其綁定到布爾字段。

如果你不想要這個隱藏的領域,你可以寫一個自定義的幫手或手動生成複選框字段。

+0

我用'' 取而代之,但在調試期間,我在'SearchBorrowed'Action中檢查'IsReturned'paramater,並且我看到該值未受複選框值影響。 Wy? – 2012-01-03 16:37:47

+0

@persianDev,這是因爲您沒有爲您的複選框指定值:''。注意'value =「true」'屬性。 – 2012-01-03 16:43:29