成功使用Querystring和ASP.NET AJAX

时间:2015-07-27 09:59:08

标签: c# asp.net ajax

祝大家度过美好的一天。

我在ASP.NET应用程序(VS 2010 SP1)中使用FormView,此FormView包含两个功能:插入和更新。 FormView仅使用1个模板:EditItemTemplate以实现上述功能。

当插入新记录时,ObjectDataSource返回生成的ID,并将其用作要附加到当前URL的查询字符串,然后由数据源用于选择新插入的记录以进行编辑。 FormView被更新面板包围,以利用AJAX技术。

ASPX代码是:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <asp:FormView ID="fvw_MoFA_NGOs_List" runat="server" DataKeyNames="id"
        DataSourceID="ods_MoFA_List" OnInit="fvw_MoFA_NGOs_List_Init" 
        OnItemCommand="fvw_MoFA_NGOs_List_ItemCommand" DefaultMode="Edit"
        Width="98%">
        <EditItemTemplate>
            <table style="width: 50%;">
                <tr>
                    <td>
                        id:
                    </td>
                    <td>
                        <asp:Label ID="idLabel1" runat="server" Text='<%# Eval("id") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Arabic Name:
                    </td>
                    <td>
                        <asp:TextBox ID="Ar_NameTextBox" runat="server" Text='<%# Bind("Ar_Name") %>' />                                        
                    </td>
                    <td>
                        <asp:RequiredFieldValidator ID="vld_ArNm" ControlToValidate="Ar_NameTextBox" runat="server" EnableClientScript="true" ErrorMessage="Arabic name is required">*</asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        English Name:
                    </td>
                    <td>
                        <asp:TextBox ID="En_NameTextBox" runat="server" Text='<%# Bind("En_Name") %>' />
                    </td>
                    <td>
                        <asp:RequiredFieldValidator ID="vld_EnNm" ControlToValidate="En_NameTextBox" runat="server" EnableClientScript="true" ErrorMessage="English name is required">*</asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td>
                        Governorate of Headquarters:
                    </td>
                    <td>
                        <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind("Hq_Governorate") %>'
                            DataSourceID="ods_Governorates" DataTextField="Mohafaza_EN" DataValueField="Mohafaza_pcode_PK">
                        </asp:DropDownList>
                    </td>
                </tr>

                <tr>
                <br />
                </tr>

                <tr>
                    <td>
                        <asp:Button ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
                            Text="Insert" />
                    </td>
                    <td>
                        <asp:Button ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
                            Text="Update" />
                    </td>
                </tr>
                <tr>
                    <td colspan='2'>

                    </td>
                </tr>
                <tr>
                    <td colspan='2'>
                        <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
                            Text="Cancel" Visible="false" />
                    </td>
                </tr>
            </table>
        </EditItemTemplate>
    </asp:FormView>
</ContentTemplate>

关联的ObjectDataSource是(注意 SelectParameters ):

<asp:ObjectDataSource ID="ods_MoFA_List" runat="server" DeleteMethod="Delete" InsertMethod="Insert_Get_NwId"
        OldValuesParameterFormatString="original_{0}" OnInserted="ods_MoFA_List_Inserted"
        SelectMethod="GetDataById" TypeName="NGOs_IIMS.NGOs_Module_IIMS.DAL.NGOs_IIMSTableAdapters.NGOs_MoFA_NGOs_ListsTableAdapter"
        UpdateMethod="Update" OnInserting="ods_MoFA_List_Inserting" OnUpdating="ods_MoFA_List_Updating">
        <DeleteParameters>
            <asp:Parameter Name="Original_id" Type="Int32" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="Ar_Name" Type="String" />
            <asp:Parameter Name="En_Name" Type="String" />
            <asp:Parameter Name="Rdate" Type="DateTime" />
            <asp:Parameter Name="Creator" Type="Int32" />
            <asp:Parameter Name="Hq_Governorate" Type="String" />
        </InsertParameters>
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="-1" Name="pid" QueryStringField="MoFAid"
                Type="Int32" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="Ar_Name" Type="String" />
            <asp:Parameter Name="En_Name" Type="String" />
            <asp:Parameter Name="Rdate" Type="DateTime" />
            <asp:Parameter Name="Creator" Type="Int32" />
            <asp:Parameter Name="Hq_Governorate" Type="String" />
            <asp:Parameter Name="Original_id" Type="Int32" />
        </UpdateParameters>
    </asp:ObjectDataSource>

在插入新记录时完成查询字符串追加:

protected void ods_MoFA_List_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
    if (e.ReturnValue != null)
        Response.Redirect(Request.Url.AbsolutePath + "?" + New_MoFA_NGO + "=" + e.ReturnValue.ToString());   
}

问题是:

插入时,尽管有AJAX,但整个页面都会刷新,但是当更新插入的记录时,AJAX可以正常工作。

使用AJAX的查询字符串有什么问题吗?我应该依赖会话变量,即使它们不是最佳选择吗?

1 个答案:

答案 0 :(得分:0)

    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional">
      <ContentTemplate>
      //Your Html code 
      </ContentTemplate>
    </asp:UpdatePanel>

这会阻止刷新页面。