gpt4 book ai didi

c# - 从 JavaScript 编辑选择列表时如何通过事件验证

转载 作者:行者123 更新时间:2023-11-30 22:20:15 25 4
gpt4 key购买 nike

我的 ASP.NET 站点中有两个选择列表,它们由服务器填充了一些元素。

// .aspx
<asp:dropdownlist id="abc" runat="server"></asp:dropdownlist>
<asp:dropdownlist id="def" runat="server"></asp:dropdownlist>

// .aspx.cs
abc.Items.Add(new ListItem("element1", "value1"));
def.Items.Add(new ListItem("element1", "value1"));

由于现在解释的原因太复杂,我还需要用JavaScript修改选择列表的选项,添加一些值。

// In the <head> of the .aspx page
var abcList = document.getElementById("abc");
var defList = document.getElementById("def");
var newAbcElement = new Option("element2", "value2", false, false);
var newDefElement = new Option("element2", "value2", false, false);
abcList.options[abcList.length] = newAbcElement;
defList.options[defList.length] = newDefElement;

当然,一旦我将表单发送回服务器(无论是通过提交还是作为来自其他一些具有 AutoPostBack="true" 的表单元素的回发),这都会弄乱 Even Validation ).

Invalid postback or callback argument. Event validation is enabled using in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

现在,我没有资源和预算来彻底修改整个页面设计,所以:什么是最快最简单的方法来更改下拉列表并不意味着我必须重写整个东西?

以便在提交表单时我的 CodeBehind 文件能够识别通过 JavaScript 添加的值?

最佳答案

好的,这里还有一个选项供您选择。您可以使用 AsyncPostBackTrigger 将这些项目添加到列表中。

一些隐藏字段:

<asp:TextBox ID="newItemsForAbc" runat="server" style="display:none;"></asp:TextBox>
<asp:TextBox ID="newItemsForDef" runat="server" style="display:none;"></asp:TextBox>
<asp:Button ID="addNewItems" runat="server" OnClick="addNewItems_Click"
style="display:none;" />

更新面板:

<asp:UpdatePanel runat="server" ID="UpdatePanel" UpdateMode="Conditional">
<ContentTemplate>
<asp:dropdownlist id="abc" runat="server"></asp:dropdownlist>
<asp:dropdownlist id="def" runat="server"></asp:dropdownlist>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="addNewItems" EventName="Click" />
</Triggers>
</asp:UpdatePanel>

用于执行异步回发的 JS 函数:

<script type="text/javascript"> function UpdateStuff(value1, value2)
{
var abcItems = document.getElementById("<%= newItemsForAbc.ClientID %>");
var defItems = document.getElementById("<%= newItemsForDef.ClientID %>");
abcItems.value=value1;
defItems.value=value2;
__doPostBack("<%= addNewItems.ClientID %>","");
}
</script>

处理按钮点击的服务器端函数:

protected void addNewItems_Click(object sender, EventArgs e)
{
string[] n1 = newItemsForAbc.Text.Split(';');
string[] n2 = newItemsForDef.Text.Split(';');

foreach(string i in n1)
{
abc.Items.Add(new ListItem(i, i));
}

foreach(string i in n2)
{
def.Items.Add(new ListItem(i,i));
}
}

更新您的列表:

var newAbcElements = "Element1;Element2;Element3";
var newDefElements = "Element4;Element5";
UpdateStuff(newAbcElements, newDefElements);

最后说明:这段代码可能无法按原样为您完成工作。您可能需要更改在字符串中存储新项目的方式,因此拆分/解析也会发生变化。您甚至可能需要不同的字符串来显示列表项及其实际值。但我相信您已经了解了基本概念。

关于c# - 从 JavaScript 编辑选择列表时如何通过事件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15085836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com