簡體   English   中英

使用JavaScript在ASP.NET中的列表框之間移動項目的最佳方法,然后在服務器端訪問結果

[英]best way to move items between ListBoxes in ASP.NET using javascript, then access results on server side

我在看似簡單的事情上遇到了很多麻煩。 在ASP.NET Web窗體中,我有兩個列表框,其間有“添加”和“刪除”按鈕。 用戶可以在一個ListBox中選擇項目,然后使用按鈕進行交換。

我在客戶端使用javascript執行此操作。

然后,我還有一個“保存”按鈕,當用戶對他們的列表滿意時,我想在服務器端進行處理。

問題:首先,當我單擊“保存”時出現以下問題:

*

無效的回發或回調參數。 使用配置或頁面中的<%@頁面EnableEventValidation =“ true”%>啟用事件驗證。 為了安全起見,此功能驗證回發或回調事件的參數源自最初呈現它們的服務器控件。 如果數據有效且預期,請使用ClientScriptManager.RegisterForEventValidation方法以注冊回發或回調數據以進行驗證。

*

我讀到解決此問題的方法之一是將ListBoxes放入UpdatePanel中,而我這樣做了,而且我正在走得更遠。

但是,如果用戶已使用客戶端javascript更改列表框的內容,則現在不會運行按鈕的Click事件的事件處理程序。 如果用戶未更改列表框的內容,則處理程序將執行。

怎么了?

我的方法基本上有缺陷嗎,對於這個問題可能會有更好的方法嗎?

謝謝你的幫助!

這是ASPX代碼:

    <table>
        <tr>
            <td>
                <asp:ListBox ID="fromListBox" runat="server" SelectionMode="Multiple" Rows="8" AutoPostBack="false" 
                    DataSourceID="SqlDataSource1" DataTextField="FullName" DataValueField="UserId" CssClass="teamListBox">
                </asp:ListBox>

            </td>

            <td> 
                <input id="btnAdd" type="button" value="Add >" /><br/>
                <br/>
                <input id="btnRemove" type="button" value="< Remove" /><br/>
                <br/>
            </td>

            <td>
                <asp:ListBox ID="toListBox" runat="server" SelectionMode="Multiple" Rows="8" AutoPostBack="false"
                    CssClass="teamListBox" DataSourceID="SqlDataSource2" DataTextField="FullName" 
                    DataValueField="UserId" >
                </asp:ListBox>  
            </td>
        </tr>
    </table>

繼承人的JavaScript,使用jQuery ....這很好,所以不是問題所在:

    $(document).ready(function () {

        $("#btnAdd").click(function () {
            $("#fromListBox option:selected").appendTo("#toListBox");
        });

        $("#btnRemove").click(function () {
            $("#toListBox option:selected").appendTo("#fromListBox");
        });

    });

只需轉到應用程序中的Web配置文件,然后在頁面部分中添加enableEventValidation =“ false”即可

我想我前一段時間也有同樣的問題。 我通過將列表框的值分配給隱藏的文本字段並使用javascript提交頁面來解決此問題。 在服務器端,我讀取了hiddent文本字段的值並進行了解析。 這是一個丑陋的客戶端/服務器代碼,但對我有用。

干凈的方法是使用ClientScriptManager.RegisterForEventValidation方法。

在這里也看看。

您必須將服務器控件ID注冊為該控件在頁面的“渲染事件”中可以由JavaScript發布的所有可能值,例如:

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
   ClientScript.RegisterForEventValidation("fromListBox", "English");
   ClientScript.RegisterForEventValidation("fromListBox", "Tamil");
   ClientScript.RegisterForEventValidation("fromListBox", "Hindi");
   ClientScript.RegisterForEventValidation("toListBox", "English");
   ClientScript.RegisterForEventValidation("toListBox", "Tamil");
   ClientScript.RegisterForEventValidation("toListBox", "Hindi");
   base.Render(writer);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM