-2

マークアップ:

<asp:TextBox ID="txtScore" runat="server" CssClass="text_50" MaxLength="200" Text=""></asp:TextBox>

<asp:MaskedEditExtender ID="maskedSeq" runat="server" TargetControlID="txtScore" Mask="999"
    MessageValidatorTip="true"
    OnFocusCssClass="MaskedEditFocus"
    OnInvalidCssClass="MaskedEditError"
    MaskType="Number"
    InputDirection="RightToLeft"
    AcceptNegative="None" 
    ErrorTooltipEnabled="True"
    PromptCharacter=""
    AutoComplete="False" /> 

コードビハインド:

double score = Convert.ToInt32(((TextBox)gridEstateScoreItem.FooterRow.FindControl("txtScore")).Text); //error start here

エラーは次のとおりです。

入力文字列は、正しい形式ではありませんでした。

4

2 に答える 2

0

Textのプロパティの値を確認するには、デバッガを使用する必要がありますTextBox。次のように、ロジックを複数の行に分割すると、デバッグが容易になります。

TextBox theTextBox = gridEstateScoreItem.FooterRow.FindControl("txtScore") as TextBox;

if(theTextBox != null)
{
    double score = Convert.ToInt32(theTextBox.Text);
}

線にブレークポイントを置いて、if(theTextBox != null)どのような価値があるかを確認してください.Text。文字を含む文字列値の場合、へのキャストInt32は失敗するため、何がユーザー入力を汚染しているのかを突き止める必要があります (ヒント: このテキスト ボックスへのユーザー入力は数字だけに制限してください)。

于 2013-11-01T02:05:46.487 に答える
0

変数スコアは double としてキャストされるため、double に変換する必要があります。

それか、テキストボックス内のテキストが整数と互換性がありません(倍精度またはテキストまたは整数以外のもの)

編集 - 私は間違っていました - 以下で説明するように、整数は暗黙的に double に変換されます。

テキストフィールドを検証するだけです。入力したテキストを検証する例を次に示します。 テキストボックスに整数値があることを確認するためのasp.net検証

それでも、変数を 1 つの型としてキャストしてから、値を別の型に変換する理由はわかりません。うまくいくかもしれませんが、オーバーヘッドが多くなり、何の役にも立たないようです。

于 2013-11-01T02:05:58.087 に答える