0

Web サイトでデータを送信しているクライアントの IP アドレスを保存しようとしています。サンプルをダウンロードして実装しました。そのスクリプトは、Web ページに IP アドレスを表示します。コードビハインドを介してこれをSQLテーブルに送信できます。FormView で同じスクリプトを使用したいのですが、「名前 IPaddress が現在のコンテキストに存在しません」というエラーが表示されているため、これをテキスト ボックスにバインドできません。そのためには、次のスクリプトを修正してください。ありがとう...

<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
    string IPAdd = string.Empty;
    IPAdd = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (string.IsNullOrEmpty(IPAdd))
        IPAdd = Request.ServerVariables["REMOTE_ADDR"];
    IPaddress.Text = IPAdd;
}
</script>

</head>

<body>

<form id="form1" runat="server">

<div>
 <asp:FormView ID="FormView1" runat="server" DataKeyNames="ID" 
    DataSourceID="SqlDataSource1" EnableModelValidation="True" DefaultMode="Insert" >
            <InsertItemTemplate>
        Your IP address:
        <asp:TextBox ID="IPaddress" runat="server" Font-Bold="true" Text='<%# Bind("IPadr") %>' />
        <br />
        Submitted by:
        <asp:TextBox ID="Submittedby" runat="server" Font-Bold="true" Text='<%# Bind("sub_by") %>' />
        <br />
        <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" 
            CommandName="Insert" Text="Insert" />
        &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" 
            CausesValidation="False" CommandName="Cancel" Text="Cancel" />
            </InsertItemTemplate>
    </asp:FormView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:IPaddressConnectionString %>" 
    DeleteCommand="DELETE FROM [mytable] WHERE [ID] = @ID" 
    InsertCommand="INSERT INTO [mytable] ([IPadr], [sub_by]) VALUES (@IPadr, @sub_by)" 
    SelectCommand="SELECT * FROM [mytable]"> 
    <DeleteParameters>
        <asp:Parameter Name="ID" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="IPadr" Type="String" />
        <asp:Parameter Name="sub_by" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="IPadr" Type="String" />
        <asp:Parameter Name="sub_by" Type="String" />
        <asp:Parameter Name="ID" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>
4

1 に答える 1

0

OnDataBound イベントで次のスクリプトを使用して達成しました。

string IPaddress;


protected void FormView1_OnDataBound(object sender, System.EventArgs e)
{
    if (FormView1.CurrentMode == FormViewMode.Insert)
    {

        TextBox IPAdd = (TextBox)FormView1.FindControl("IPaddress");
        if (IPAdd != null)
        {

            IPAdd.Text = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (string.IsNullOrEmpty(IPAdd.Text))

                IPAdd.Text = Request.ServerVariables["REMOTE_ADDR"];

        }

    }

}
于 2013-08-21T05:26:30.593 に答える