[英]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.