祝大家度过美好的一天。
我在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的查询字符串有什么问题吗?我应该依赖会话变量,即使它们不是最佳选择吗?
答案 0 :(得分:0)
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional">
<ContentTemplate>
//Your Html code
</ContentTemplate>
</asp:UpdatePanel>
这会阻止刷新页面。