2

ラジオボタンリストでDBから1つのレコードを表示したいプロジェクトがあります.1つのオプションを選択して[次へ]ボタンをクリックした後、次のレコードがロードされます.これは私のHtmlコードです:

<table style ="width :800px">
        <tr>
            <td style="width: 100px">
                <asp:Image ID="Image1" runat="server" ImageUrl="~/images/stdents12.jpeg" /></td>
        </tr>
        <tr>
            <td style="width: 100px">


                <table style="width: 950px" id="TABLE1" onclick="return TABLE1_onclick()">
        <tr>
            <td colspan="8" style="color: white; height: 21px; background-color: #3366ff">
                <asp:Label ID="Label1" runat="server" Font-Bold="True" Text="Test No :" Width="82px"></asp:Label>
                <asp:Label ID="TestNo" runat="server" Text="Label" Width="100px"></asp:Label><asp:Label ID="Label2" runat="server" Font-Bold="True" Text="Test Name :" Width="84px"></asp:Label>
                <asp:Label ID="TestName" runat="server" Text="Name Of the Test" Width="501px"></asp:Label><asp:Label ID="Label3" runat="server" Font-Bold="True" Text="Question :"></asp:Label>
                <asp:Label ID="Question" runat="server" Text="N of T" Width="52px"></asp:Label></td>
        </tr>
        <tr>
            <td style="width: 23px" rowspan="5">
            </td>
            <td style="width: 100px; height: 1px;">
                &nbsp;</td>
            <td style="width: 100px; height: 1px;">  



            </td>
            <td style="width: 100px; height: 1px;">
            </td>
            <td style="width: 100px; height: 1px;">
            </td>
            <td style="width: 100px; height: 1px;">
            </td>
            <td style="width: 100px; height: 1px;">
                </td>
            <td style="width: 100px; height: 1px;">
             <div class="timerCss"> <asp:Label ID="lblTimerCount" runat="server" Height="5px" Width="232px"></asp:Label>&nbsp;</div>
                </td>
        </tr>
        <tr>
            <td colspan="7" align="right">
                <asp:Image ID="Image2"  runat="server" />
                <asp:Label ID="Questionlbl" runat="server" Height="66px" Text="Label" 
                    Width="317px"></asp:Label></td>
        </tr>
        <tr>
            <td colspan="7">
                &nbsp;</td>
        </tr>
        <tr>
            <td colspan="7">


                <asp:RadioButtonList ID="RadioButtonList1" runat="server" 
                    RepeatDirection="Horizontal">
                </asp:RadioButtonList>


                </td>
        </tr>
        <tr>
            <td style="width: 100px; height: 12px;">
                &nbsp;</td>
            <td style="width: 100px; height: 12px;">
            </td>
            <td style="width: 100px; height: 12px;">
            </td>
            <td style="width: 100px; height: 12px;">
                </td>
            <td style="width: 100px; height: 12px;">
                </td>
            <td style="width: 100px; height: 12px;">
                <asp:Button ID="Button2" runat="server"   Text="Skip" Width="55px" /></td>
            <td style="width: 100px; height: 12px;">
                <asp:Button ID="BtnNext" runat="server" onclick="BtnNext_Click" Text="Next" 
                    Width="70px" />
            </td>
        </tr>
    </table>


            </td>
        </tr>
        <tr>
            <td style="background-color: silver;" class="style1">
            </td>
        </tr>
    </table>

これは私のコードビハインドページです:

void Page_PreRender(object sender, EventArgs e)
    {

        OnlineExamEntities context = new OnlineExamEntities();
        StringBuilder bldr = new StringBuilder();
        bldr.AppendFormat("var Timer = new myTimer({0},{1},'{2}','timerData');", this.timerStartValue, this.TimerInterval, this.lblTimerCount.ClientID);
        bldr.Append("Timer.go()");
        ClientScript.RegisterStartupScript(this.GetType(), "TimerScript", bldr.ToString(), true);
        ClientScript.RegisterHiddenField("timerData", timerStartValue.ToString());
        /////////////////////////////
        List<int> a = (List<int>)Session["QnumList"];
        List<string> resulttemp = new List<string>();

        int j = a[Convert.ToInt32(Session["Click"].ToString())];

        var q3 = ((from c in context.questions
                   orderby c.QID
                   where c.QID == j
                   select c)).SingleOrDefault();
        resulttemp.Add(q3.trueAns.ToString());
        Session["result"] = resulttemp;

        Questionlbl.Text = q3.Question1.ToString();
        Image2.ImageUrl = q3.ans4.ToString();
        RadioButtonList1.Items.Clear();
        string ans1, ans2, ans3;
        ans1 = q3.ans1.ToString();
        ans2 = q3.ans2.ToString();
        ans3 = q3.ans3.ToString();
        RadioButtonList1.Items.Add(String.Format("<img src='{0}'>", ans1));
        RadioButtonList1.Items.Add(String.Format("<img src='{0}'>", ans2));
        RadioButtonList1.Items.Add(String.Format("<img src='{0}'>", ans3));

    }

1 つのオプションを選択し、[次へ] ボタンをクリックして別のレコードをロードすると、次のエラーが発生します。

*潜在的に危険な Request.Form 値がクライアントから検出されました (RadioButtonList1="*

Validate Request ="false" を調整しましたが、うまくいきません。

4

1 に答える 1

4

サーバーは、誰かが Html コードを挿入する可能性があることを警告しています。検証をキャンセルするのは良いことではありません。そのためにServer.HtmlEncodeを使用できます。

RadioButtonList1.Items.Add(Server.HtmlEncode(String.Format("<img src='{0}'>", ans1)));

ユーザーが値を選択した後、Server.HtmlDecodeでそれをデコードできます。

ただし、この場合、タグ全体ではなく、選択した img のみが必要なimgため、値を別の方法で設定できます (2 番目のパラメーターは値です)。

RadioButtonList1.Items.Add(new ListItem(String.Format("<img src='{0}'>", ans1), ans1));

このように、html フォームは潜在的に危険な値とは見なされない画像パスのみを保持します。

于 2012-09-06T06:15:31.583 に答える