2016-05-17 21 views
0

ASP.NET MVC Webフォームで作業していて、ユーザーがチェックしたチェックボックスの値を取得しようとしています。アプリケーションを実行すると例外がスローされ、サーバーのエラーは、コントローラからのコードの行を次のようにdiplayedさ:System.FormatException:文字列が有効なブール値として認識されませんでした。

supp = Convert.ToBoolean(checksupp); 

私はデバッグモードにVisual Studioを実行しているし、チェックボックスの値が渡さなっているが、次の例外を示しています:

文字列が有効なブール値として認識されませんでした。

モデル、ビュー、コントローラを以下に示しますが、この問題を解決する方法がわかりません。

モデル

public class WebFormXML{ 

    private List<string> suppressions; 

    public WebFormXML() 
    { 
     suppressions = new List<string>(); 
    } 

    public List<string> Suppressions 
    { 
     get { return suppressions; } 
     set { suppressions = value; } 
    } 

{ 

ビュー

<input type="checkbox" groupname="suppressions" name="suppressions" id="supp1" value="Prepayments" runat="server" /> 

コントローラーのコードで

[HttpPost] 
    public ActionResult createXML(FormCollection collection) 
    WebFormXML wfx = new WebFormXML(); 
    string checksupp = collection["suppressions"]; 
    bool supp = true; 
    supp = Convert.ToBoolean(checksupp); 
    wfx.Suppressions.Add(checksupp); 
+0

あなたはchecksuppがブール値であると思わせる何か? –

答えて

1

これが発生しています「真」または「偽」など)。デフォルトで

チェックボックス提出

チェックボックスにのみチェック値を送信しますので、あなたは他のオプションがチェックされたかどうかを確認するために、他のチェックを実行する必要はありません。あなたは複数の可能な選択を処理する必要がある場合は、単にあなたがチェックオプションを反復処理し、それぞれを追加します。

[HttpPost] 
public ActionResult createXML(FormCollection collection) 
{ 
    // Build your WebForm object 
    WebFormXML wfx = new WebFormXML(); 
    // Get your suppressed items 
    var suppressions = collection["suppressions"].Split(','); 
    // Add each of them to your object 
    wfx.Suppressions.AddRange(suppressions); 

    // Other code here 
} 

enter image description here

あなたはvery basic working example of this demonstrated hereを参照して下に見られることができます。

コントローラ

[HttpPost] 
public ActionResult Index(FormCollection collection) 
{ 
    // Get your suppressed elements (they will come in as a comma-delimited string) 
    var suppressions = collection["suppressions"]; 
    return Content("Properties: [" + suppressions + "] were suppressed."); 
} 

ビュー

@using (Html.BeginForm()) 
{ 
    <b>A</b> 
    <input type="checkbox" groupname="suppressions" name="suppressions" value="A" /> 
    <b>B</b> 
    <input type="checkbox" groupname="suppressions" name="suppressions" value="B" /> 
    <b>C</b> 
    <input type="checkbox" groupname="suppressions" name="suppressions" value="C" /> 
    <br /> 
    <button type="submit">Check Suppressions</button> 
} 
+0

簡単な例をありがとう、私はこれから構築することができ、それは私の問題を解決しました。 – r1993

+0

ウェブアプリケーションセキュリティスキャナがガベージデータをフォームに入力しようとしたときにこのエラーが発生しました。 – nmit026

1

string checksupp = collection["suppressions"]; 

それはchecksupp = "前払い"を返します。

Convert.ToBoolean(value); //value only true or false 

とあなたのコードと、それは次のとおりです。ブール値に変換できる値とは対照的に、あなたが読むことを期待している値は、(実際には「前払費用」であるため、

Convert.ToBoolean("Prepayments"); // -> error 
+1

これは問題を正しく識別しますが、解決策を提示することもできますか?質問者は問題の解決策を探しています。 –

関連する問題