ASP.NET 一个DropDownList使用AJAX替换新值后,后台不能获取正确的值

whisshen 2014-08-18 01:22:17
string sortId = DropDownList2.SelectedValue;
获取的sortId还是异步刷新前的值。

AJAX更新了前台,如何更新后台数据
...全文
325 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dd_zhouqian 2014-08-25
  • 打赏
  • 举报
回复
引用 14 楼 zzflover 的回复:
昨天试了下,发现有点问题。使用ajax更新dropdownlist以后,点击按钮就报错了:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。 难道楼主没有这个问题?还是设置Page EnableEventValidation="false" 了?
见我的博客有提到,vs2010好像有这样的安全问题 http://blog.csdn.net/dd_zhouqian/article/details/38683455
明缘 2014-08-21
  • 打赏
  • 举报
回复
引用 5 楼 dd_zhouqian 的回复:
根据上面各位的建议,我写了篇博客,楼主可以看下,是否满足你的要求 http://blog.csdn.net/dd_zhouqian/article/details/38683455
这个不错。
7年 2014-08-21
  • 打赏
  • 举报
回复
昨天试了下,发现有点问题。使用ajax更新dropdownlist以后,点击按钮就报错了:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。 难道楼主没有这个问题?还是设置Page EnableEventValidation="false" 了?
dd_zhouqian 2014-08-20
  • 打赏
  • 举报
回复
引用 5 楼 dd_zhouqian 的回复:
根据上面各位的建议,我写了篇博客,楼主可以看下,是否满足你的要求 http://blog.csdn.net/dd_zhouqian/article/details/38683455
其实本人的这个例子,现在想想感觉实用性不是特别强,例子中可用服务器控件button的事件来获取列表框的当前值,但是每触发一次该事件,会导致页面刷新一次。

public partial class _Default : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(Request.Form["Hidden1"]);
    }
}
dd_zhouqian 2014-08-20
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
[quote=引用 楼主 FlyingTheDay 的回复:] string sortId = DropDownList2.SelectedValue; 获取的sortId还是异步刷新前的值。 AJAX更新了前台,如何更新后台数据
当然,你的所谓“Ajax”并不会像普通 <form Action=....> 那样去 post 控件的值。你的 Ajax请求必须把前端的下拉列表的当前的 value 作为参数传送给服务器端,而不是相反地去取 SelectedValue 值。 [/quote] 如果是将前端下拉列表当前值传输给后台,那就将当前值作为参数调用(get或者post)后台方法好了
qq175265664 2014-08-20
  • 打赏
  • 举报
回复
在事件中绑定AJAX
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
人家是什么情况,并不是 DropdownList不能在回发时返回值,并不是在前端去额外设置了什么特殊的值,一定要看清楚。 如果一个 Hidden 域可以返回值,那么人家的 DropdownList 也就一样可以取得正确的 SelectedValue了。
我理解出来的意思是LZ通过AJAX改变了服务器控件DropDownList的某个值,但对于这个控件,服务器会通过ViewState恢复后台加载时的赋值,所以在UI上通过AJAX获取新值,并通过更换DropDownList的相关值,当_postback时,这些改变在后台是找不到的,这个DropDownList的值会被恢复成PageLoad时的值
  • 打赏
  • 举报
回复
人家是什么情况,并不是 DropdownList不能在回发时返回值,并不是在前端去额外设置了什么特殊的值,一定要看清楚。 如果一个 Hidden 域可以返回值,那么人家的 DropdownList 也就一样可以取得正确的 SelectedValue了。
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
碰上这种要Ajax改变DropDownList值的问题,为啥不能考虑直接将值赋给一个Hidden,然后后台从Hidden中取值呢?
lz 的意思是“Ajax访问服务器”,不是指页面回发。
  • 打赏
  • 举报
回复
引用 楼主 FlyingTheDay 的回复:
string sortId = DropDownList2.SelectedValue; 获取的sortId还是异步刷新前的值。 AJAX更新了前台,如何更新后台数据
当然,你的所谓“Ajax”并不会像普通 <form Action=....> 那样去 post 控件的值。你的 Ajax请求必须把前端的下拉列表的当前的 value 作为参数传送给服务器端,而不是相反地去取 SelectedValue 值。
  • 打赏
  • 举报
回复
引用 4 楼 a475372067 的回复:
[quote=引用 3 楼 starfd 的回复:] 碰上这种要Ajax改变DropDownList值的问题,为啥不能考虑直接将值赋给一个Hidden,然后后台从Hidden中取值呢?
正解,因为先执行的后台代码,再执行JS,所以你ajax改变了值就获取不到了,在前台给隐藏控件赋值,后台再取。[/quote]
引用 4 楼 a475372067 的回复:
[quote=引用 3 楼 starfd 的回复:] 碰上这种要Ajax改变DropDownList值的问题,为啥不能考虑直接将值赋给一个Hidden,然后后台从Hidden中取值呢?
正解,因为先执行的后台代码,再执行JS,所以你ajax改变了值就获取不到了,在前台给隐藏控件赋值,后台再取。[/quote] 貌似不错的方法
dd_zhouqian 2014-08-19
  • 打赏
  • 举报
回复
根据上面各位的建议,我写了篇博客,楼主可以看下,是否满足你的要求 http://blog.csdn.net/dd_zhouqian/article/details/38683455
凹加凸等于啥 2014-08-18
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
碰上这种要Ajax改变DropDownList值的问题,为啥不能考虑直接将值赋给一个Hidden,然后后台从Hidden中取值呢?
正解,因为先执行的后台代码,再执行JS,所以你ajax改变了值就获取不到了,在前台给隐藏控件赋值,后台再取。
  • 打赏
  • 举报
回复
碰上这种要Ajax改变DropDownList值的问题,为啥不能考虑直接将值赋给一个Hidden,然后后台从Hidden中取值呢?
  • 打赏
  • 举报
回复
后台需要页面全部刷新才能获取到新值,用Ajax肯定不行的

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧