我的项目中有两个下拉列表,ddFtherEmployeeNumber
并且ddFatherName
. 在ddFatherEmployeeNumber selectedIndexChange
事件中,我希望ddEmployeeFatherName
从数据库中加载数据。
我已经做到了,而且效果很好。但是有一个问题,在每次迭代indexchange
事件之后,它都会刷新页面,我不喜欢这样。我在网上搜索过,但找不到更好的解决方案。
这就是为什么我来这里并发布我的问题。很多人说你必须使用 jQuery Ajax 来完成,有些人还提到了UpdatePanel
. 但我对jQuery一无所知。所以各位,请帮帮我。通过UpdatePanel
或通过 jQuery Ajax。
这是我的.aspx
页面
<div class="form-group row">
<!--Row two-->
<div class="col-md-8 forLabels">
<div class="col-md-6"></div>
<asp:Label ID="EmpFatherEmployeeNo" for="EmpFatherEmployeeNo" runat="server" Visible="True">Father Employee Number*</asp:Label>
<asp:DropDownList ID="ddFatherEmployeeNumber" runat="server" CssClass="input-sm form-control custom" AutoPostBack="True" DataTextField="EmployeeNo" DataValueField="Id" OnSelectedIndexChanged="ddFatherEmployeeNumber_SelectedIndexChanged" ClientIDMode="Static" AppendDataBoundItems="true"></asp:DropDownList>
</div>
<div class="col-md-4 forLabels">
<asp:Label ID="EmpFatherName" for="EmpFatherName" runat="server">Father Name</asp:Label>
<asp:DropDownList ID="ddEmployeeFatherName" runat="server" DataTextField="Name" DataValueField="Id" CssClass="input-sm form-control"></asp:DropDownList>
</div>
</div>
这是我的ddFatherEmployeeNumber_SelectedIndexChanged
protected void ddFatherEmployeeNumber_SelectedIndexChanged(object sender, EventArgs e)
{
SqlParameter param = new SqlParameter("@EmployeeNo", ddFatherEmployeeNumber.SelectedItem.Text);
DataSet DS = GetData("spGetFatherNameByFatherEmployeeNumber", param);
ddEmployeeFatherName.DataSource = DS;
ddEmployeeFatherName.DataBind();
}
这是我的GetData
方法
private DataSet GetData(string SPName, SqlParameter SPParameter)
{
DataSet DS = new DataSet();
using (SqlConnection con = new SqlConnection(Base.GetConnection))
{
SqlDataAdapter ad = new SqlDataAdapter(SPName, con);
ad.SelectCommand.CommandType = CommandType.StoredProcedure;
if (SPParameter != null)
{
ad.SelectCommand.Parameters.Add(SPParameter);
}
ad.Fill(DS);
}
return DS;
}
这样做的目的是,我有IsValidated()
Method 是
private bool IsValidated()
{
if (tbEmployeeName.Text == string.Empty)
{
tbEmployeeName.BorderColor = Color.Red;
ShowNotification("Error: Name is required!", WarningType.Danger);
tbEmployeeName.Focus();
return false;
}
if (tbEmployeeApplicationNo.Text == string.Empty)
{
tbEmployeeName.BorderColor = Color.Transparent;
tbEmployeeApplicationNo.BorderColor = Color.Red;
ShowNotification("Error: Application Number is Required!", WarningType.Danger);
tbEmployeeApplicationNo.Focus();
return false;
}
return true;
}
现在,当我不输入Name
orApplicationNo
并按下Add
按钮时,它会告诉我Message
它是必需的。这里程序运行良好,但是当我第二次没有在必填字段中输入任何内容时,它再次显示一条消息,但这一次,下拉列表ddFatherEmployeeNo
无法加载数据。我不明白为什么在几次回发操作后它会丢失数据源。这里有图片以便清楚理解。第一次完美加载记录这里是图片
但是当IsValidated()
函数给我一条消息时Name is required or something like that
,ddFatherEmployeeNo
下拉列表会丢失它的datasource
. 这是图片
所以我的主要问题是,如何防止页面刷新_SelectedIndexChanged
事件以及如何阻止Error
我面临的这种情况。Dropdownlist loses its DataSource after postback
. 这是我的Page_Load
事件代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddFatherEmployeeNumber.DataSource = GetData("spGetFatherEmployeeNumber", null);
ddFatherEmployeeNumber.DataBind();
ddFatherEmployeeNumber.Items.Insert(0, new ListItem("Select Father Employee No", "0"));
}
}
更新:我有一个script
选择数据。这里是
<%--Code for Selecting Dropdown List Item--%>
<script>
$(document).ready(function () {
$("#ddFatherEmployeeNumber").select2({
placeholder: "Select an option",
allowClear: true
});
});
</script>
我认为这与回发有关。