1

要求したDNSレコードを追跡するASP.NetWebアプリに動作するGridViewがあります。これは次のように定義されています。

<asp:GridView ID="gvExistingEntries" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="DNSId" DataSourceID="dsDNS" Width="100%" 
    BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" 
    CellPadding="4" ForeColor="Black" GridLines="Vertical" AllowSorting="True" ShowFooter="true">
    <AlternatingRowStyle BackColor="White" />
    <Columns>
        <asp:BoundField DataField="DNSId" Visible="false" ReadOnly="true" />
        <asp:BoundField DataField="DNSName" HeaderText="DNS Name" SortExpression="DNSName" />
        <asp:BoundField DataField="IPAddress" HeaderText="IP Address" ReadOnly="True" SortExpression="IPAddress" />
        <asp:BoundField DataField="RecordType" HeaderText="Record Type" SortExpression="RecordType" />
        <asp:BoundField DataField="RequestTicket" HeaderText="Request Ticket" SortExpression="RequestTicket" />
        <asp:BoundField DataField="LastUpdateBy" HeaderText="Updated By" ReadOnly="True" SortExpression="LastUpdateBy" />

        <asp:TemplateField ShowHeader="false" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <asp:LinkButton ID="updateButton" runat="server" CommandName="Edit" Text="Update" />
                <asp:LinkButton ID="deleteButton" runat="server" CommandName="Delete" Text="Delete" onClientClick="return confirm('Are you sure you want to delete this entry?');" />
            </ItemTemplate>

            <EditItemTemplate>
                <asp:LinkButton ID="saveUpdate" runat="server" CommandName="Update" Text="Save" onClientClick="return confirm('Are you sure you want to save these changes?');" />
                <asp:LinkButton ID="cancelUpdate" runat="server" CommandName="Cancel" Text="Cancel" />
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
    <FooterStyle BackColor="#CCCC99" />
    <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
    <RowStyle BackColor="#F7F7DE" />
    <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
    <SortedAscendingCellStyle BackColor="#FBFBF2" />
    <SortedAscendingHeaderStyle BackColor="#848384" />
    <SortedDescendingCellStyle BackColor="#EAEAD3" />
    <SortedDescendingHeaderStyle BackColor="#575357" />
</asp:GridView>

データソースは次のように定義されています。

<asp:SqlDataSource ID="dsDNS" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DNSMonConnectionString %>" 
    SelectCommand="SELECT [DNSId], [DNSName], [RecordType], [StartValidityDate], [EndValidityDate], [IPAddress], [LastUpdate], [RequestTicket], (select [FirstName] + ' ' + [LastName] + ' (' + [Login] + ')' FROM [User] where [User].[UserID] = [DomainName].[LastUpdateBy]) AS [LastUpdateBy] FROM [DomainName] ORDER BY [DNSName]"

    UpdateCommandType="StoredProcedure"
    UpdateCommand="sp_update_DNSEntry" OnUpdating
    DeleteCommandType="StoredProcedure"
    DeleteCommand="sp_drop_DNSEntry">
    <DeleteParameters>
        <asp:Parameter Name="DNSId" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="DNSId" />
        <asp:Parameter Name="DNSName" />
        <asp:Parameter Name="RecordType" />
        <asp:Parameter Name="IPAddress" />
        <asp:Parameter Name="RequestTicket" />
    </UpdateParameters>
</asp:SqlDataSource>

ユーザーが更新機能を使用するときはいつでも、これは機能してデータベースに保存しますが、保存する前にコードでIPアドレスを解決する必要があります。私はこれを実行する準備ができているメソッドを持っていますが、それをコードに組み込む方法がわかりません。

可能であれば、データベースにコードを配置することは避けたいと思います。

4

2 に答える 2

0

OnUpdatingイベント を使用して、更新前にIPアドレスを更新できます。

<asp:SqlDataSource OnUpdating="OnSqlUpdating"
    ... etc />

ハンドラーコードで、SqlDataSourceCommandEventArgsからCommandプロパティを取得し、適切なパラメーターを更新します。

private void OnSqlUpdating(Object source, SqlDataSourceCommandEventArgs e) 
{
    DbCommand command = e.Command;
    command.Parameters["IPAddress"] = Request.UserHostAddress;
}
于 2012-11-07T05:48:22.533 に答える
0

興味のある人のために、これを達成するためのコードは次のとおりです。

<asp:SqlDataSource ID="dsDNS" runat="server" OnUpdating="OnSqlUpdating" ... />

protected void OnSqlUpdating(Object source, SqlDataSourceCommandEventArgs e)
{
    string sIPAddresses = "";

    // Custom code here to look up IP addresses.

    DbCommand dbCmd = e.Command;
    dbCmd.Parameters["@IPAddress"].Value = sIPAddresses;
}
于 2012-11-08T04:00:50.643 に答える