【发布时间】:2019-06-21 02:20:25
【问题描述】:
我的项目中有两个下拉列表,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()方法是
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 或ApplicationNo 并按下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>
我认为这与回发有关。
【问题讨论】:
-
您可以使用级联下拉列表或更新面板
标签: c# jquery asp.net webforms