1. 程式人生 > >WebForm框架頁面上js修改服務端控制元件導致後臺不能正確獲取到控制元件值的問題【總結】

WebForm框架頁面上js修改服務端控制元件導致後臺不能正確獲取到控制元件值的問題【總結】

WebForm框架頁面上js修改服務端控制元件導致後臺不能正確獲取到控制元件值的問題

頁面程式碼

                <td><span id="sp_notice_type_item">公告型別</span></td>
                <td style="width:110px;">
                    <asp:DropDownList ID="ddl_notice_type_item</span>" runat="server">
                        <asp:ListItem Value="-1">-選擇-</asp:ListItem>
                        <asp:ListItem Value="1">運維公告</asp:ListItem>
                        <asp:ListItem Value="2">產品公告</asp:ListItem>
                        <asp:ListItem Value="3">活動公告</asp:ListItem>
                    </asp:DropDownList>
                </td>

js業務邏輯控制
         if (type == "0")
         {
             $("#sp_notice_type_item").html("公告型別");
             $("#ddl_notice_type_item").html("<option value='-1'>-選擇-</option><option value='1'>運維公告</option><option value='2'>產品公告</option><option value='4'>活動公告</option>");
         }
         if (type == "1")
         {
             $("#sp_notice_type_item").html("問題型別");
             $("#ddl_notice_type_item").html("<option value='-1'>-選擇-</option><option value='1'>熱門問題</option><option value='2'>新手須知</option><option value='3'>隱私說明</option>");
         }

後臺程式碼
ddl_notice_type_item.SelectedValue //此用法在提交時報錯如下,重新整理後正常提交,但是下拉選項有變動時獲取到的值為-1,即未取到實際的值

回發或回撥引數無效。在配置中使用 <pages enableEventValidation="true"/> 或在頁面中使用 <%@ Page EnableEventValidation="true" %> 啟用了事件驗證。出於安全目的,此功能驗證回發或回撥事件的引數是否來源於最初呈現這些事件的伺服器控制元件。如果資料有效並且是預期的,則使用 ClientScriptManager.RegisterForEventValidation 方法來註冊回發或回撥資料以進行驗證。


解決辦法:

在頁面page屬性中加上EnableEventValidation="false"

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Add.aspx.cs" Inherits="WebApplication1.MainAdmin.News.Add" EnableEventValidation="false" %>

後臺獲取控制元件值使用
Request.Form["ddl_notice_type_item"] //可以正常獲取下拉選項的值