2012-01-03 9 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 

私は「戻される」のチェックボックス、 を確認せずにフォームを送信するとき、それはresulを返します。 ?

.../SearchBorrowed検索語= &戻される= falseを

しかし、私が戻される「のチェックボックスをチェックすると、URLは次のようになる:tとURLは以下のようになります

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

上記のURLに2つのIsReturnedがあるのはなぜですか?

どのようにこれを修正できますか?

+0

強く型付けされたモデルの使用をお勧めします。 –

+0

これはモデル内に 'IEnumerable 'というモデルを取得するビュー内の検索フォームなので、モデルにチェックボックスをバインドすることはできません。 私がそれをしたいのであれば、ViewModelを使用する必要があります。 –

答えて

2

なぜ上記のURLに2つの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'アクションで 'IsReturned'パラメータをチェックして、値がチェックボックスの値。ワイ? –

+0

@persianDevの場合は、チェックボックスに値を指定しなかったためです: '' 'value =" true "'属性に注目してください。 –

関連する問題