我使用jquery ajax绑定asp.net页面上的国家/地区城市下拉列表。 一切顺利,直到页面回发到服务器。用户为国家/地区和城市选择的值无法提交功能。
这样做的原因似乎是从ajax绑定的下拉项目没有写入viewstate,因此在提交时没有找到值。
可以采用哪种解决方法。
答案 0 :(得分:3)
不仅如此,在启用ViewState验证的情况下,您还应该获得安全性异常 - 因为页面POST的值不在可用值列表中。
Web Forms引擎在请求验证方面是一种偏执狂。
通常的解决方案是:
1)禁用页面的事件验证
2)不要依赖于组合的SelectedItem
(因为浏览器提交的值不在列表中),而是从较低级别this.Request.Form["dropdownID"]
读取。
答案 1 :(得分:0)
简易解决方案隐藏框可以保存所选值。如果页面回发,如果隐藏的框值不为空,则使用从隐藏框读取的值进行服务器端处理。 “ViewState不对表单字段值负责。因此,使用隐藏字段来保存值。”
亲自检查。
C#
public partial class _Default : System.Web.UI.Page
{
public string id = "";
protected void Page_Load(object sender, EventArgs e)
{
id = this.Label1.ClientID;
}
protected void Button1_Click(object sender, EventArgs e)
{
string testvalue = this.Label1.Value;
}
}
//break down at button1_click
<asp:HiddenField ID="Label1" runat="server" Value="" />
javascript
$(document).ready(function () {
$("#"+'<%=id%>').val("test");
});
所以你需要做的就是在选择项目时向dropdownbox添加一个事件监听器更新隐藏字段的值,然后当服务器端点击事件发生时,使用隐藏字段中的值,个人而言,我不喜欢关闭viewstate验证。