我在asp.net网络表单中有两个连接(链接)下拉列表。
<p>
<asp:DropDownList runat="server" CssClass="country" ID="ddlCountry" OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
</p>
<p>
<asp:DropDownList runat="server" CssClass="city" ID="ddlCity" ></asp:DropDownList>
</p>
<input type="button" class="magicBtn" value="Magic" />
这是剧本
$(document).ready(function () {
$(".magicBtn").click(function () {
var obj = { CountryId: "2", CityId: "3" };
$(".country").val(obj.CountryId).trigger("change");
$(".city").val(obj.CityId);
});
});
当我分配这样的值时,只显示国家/地区下拉列表,然后填充城市下拉列表,但不会显示其值。如果我再次点击magicBtn,则会出现。
我想,只要我点击按钮,就会触发更改事件(__ doPstBack),因此在分配城市值之前,页面正在刷新,但是检索选项,然后通过第二次单击,选项已准备就绪,因此分配是OK。
(此时,我很好奇如何将值分配给城市下拉列表。当我看到它在第二次点击时填充时我感到很惊讶,因为我认为只要我点击魔术按钮,{{1回事和城市值分配永远不会发生。所以我认为在第一次点击后,选择了乡村选项,然后第二次点击,检查选项值,如果相同则不回发,所以它可以通过到下面的行分配城市下拉, 然而 当我在开发工具上检查这个时,我看到它确实回发了,虽然选项值这个国家是一样的。所以尽管回发了,城市下拉的分配方式是什么? gif与这个问题有关。)
所以我想要的是,在第一次点击后,国家和城市选项值被分配给选择。
答案 0 :(得分:0)
在第一次单击时,jquery触发器方法会触发回发,页面的load
事件,然后触发下拉列表的selectedIndexChanged
事件。 selectedIndexChanged事件的内容是
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
ddlCity.Items.Clear();
FillCityDropdown(ddlCity, Convert.ToInt32(ddlCountry.SelectedItem.Value));
}
因此,在此$(".city").val(obj.CityId);
作业之后,也会填充国家/地区下拉列表,因为这项作业在填充之前无法正常工作。
通过第二次点击,再次更改会触发回发,但现在,因为所选的国家/地区下拉列表未更改,其事件未被触发,因此代码隐藏中没有任何反应,但是在客户端上旁边城市下拉人口已经填充,并且分配成真。
我解决了这个问题
的Javascript
$(document).ready(function () {
$(".magicBtn").click(function () {
var obj = { CountryId: "2", CityId: "3" };
$(".country").val(obj.CountryId);
__doPostBack("ddlCountry", obj.CityId);
});
});
Index.aspx.cs
string controlName = "";
string controlArg = "";
protected void Page_Load(object sender, EventArgs e)
{
controlName = Request.Params.Get("__EVENTTARGET");
controlArg = Request.Params.Get("__EVENTARGUMENT");
//..
}
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
ddlCity.Items.Clear();
FillCityDropdown(ddlCity, Convert.ToInt32(ddlCountry.SelectedItem.Value));
if (!string.IsNullOrEmpty(controlArg))
ddlCity.SelectedValue = controlArg;
}