C# 查找是否动态添加了下拉列表值
是否有方法确定(回发后)dropdownlist中的值是动态添加的还是初始值之一 例如C# 查找是否动态添加了下拉列表值,c#,asp.net,viewstate,C#,Asp.net,Viewstate,是否有方法确定(回发后)dropdownlist中的值是动态添加的还是初始值之一 例如 1. 2. 3. //回邮1 私有无效AddExtraItemToList() { if(someCondition)//可以插入也可以不插入额外的项 MyDDL.项目添加(“17”); } //回邮2 private void RemoveExtraItemsFromList() { //是否从列表中删除任何非默认值? } 在代码隐藏或其他方式中编码默认值列表显然很简单,但如果您可以通过查询哪些值是初始
1.
2.
3.
//回邮1
私有无效AddExtraItemToList()
{
if(someCondition)//可以插入也可以不插入额外的项
MyDDL.项目添加(“17”);
}
//回邮2
private void RemoveExtraItemsFromList()
{
//是否从列表中删除任何非默认值?
}
在代码隐藏或其他方式中编码默认值列表显然很简单,但如果您可以通过查询哪些值是初始属性,哪些值是从viewstate还原生成的,这将是一件好事。Hai,看看这个
您可以根据列表项是原始项还是额外项,为它们指定相同的值
<asp:DropDownList ID="MyDDL" runat="server">
<asp:ListItem Value="A">1</asp:ListItem>
<asp:ListItem Value="A">2</asp:ListItem>
<asp:ListItem Value="A">3</asp:ListItem>
</asp:DropDownList>
private void AddExtraItemToList() {
if (someCondition) // extra items may or may not be inserted
MyDDL.Items.Add(new ListItem("17", "B");
}
private void RemoveExtraItemsFromList() {
for (int x = MyDDL.Items.Count - 1; x > 0; --x) {
if MyDDL.Items[x].Value = "B" {
MyDDL.Items.RemoveAt(x);
}
}
}
1.
2.
3.
私有无效AddExtraItemToList(){
if(someCondition)//可以插入也可以不插入额外的项
添加(新列表项(“17”、“B”);
}
private void RemoveExtraItemsFromList(){
对于(int x=MyDDL.Items.Count-1;x>0;--x){
如果MyDDL.Items[x].Value=“B”{
MyDDL.Items.RemoveAt(x);
}
}
}
抱歉,如果出现C#语法错误-我有点生疏,正在从VB进行翻译。处理此问题的最佳方法是从一开始就跟踪代码中的原始值 下面是一个经过修改的代码版本,它通过在viewstate中存储原始文件来实现这一点(您可以将它们存储在任何位置)。诀窍是,在对新项目进行任何动态插入之前,您必须先从下拉列表中取出项目
public string[] OriginalDropDownValues
{
get
{
return ViewState["origValues"] as string[];
}
set
{
ViewState.Add("origValues", value);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// get the values from the control and store them in viewstate
var oValues = new List<string>();
foreach (ListItem item in MyDDL.Items)
{
oValues.Add(item.Value);
}
OriginalDropDownValues = oValues.ToArray();
}
}
// on postback 2
private void RemoveExtraItemsFromList()
{
List<string> valuesToKill = new List<string>();
var oItems = OriginalDropDownValues;
foreach (ListItem currentItem in MyDDL.Items)
{
if (!oItems.Contains(currentItem.Value))
{
// can't remove items yet, would modify collection we are iterating through
valuesToKill.Add(currentItem.Value);
}
}
foreach (var killVal in valuesToKill)//loop kill values and locate+remove each from drop down.
{
MyDDL.Items.Remove(MyDDL.Items.FindByValue(killVal));
}
}
public string[]OriginalDropDownValues
{
得到
{
将ViewState[“OrigValue”]返回为字符串[];
}
设置
{
添加(“origValue”,value);
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
//从控件获取值并将其存储在viewstate中
var oValues=新列表();
foreach(MyDDL.Items中的ListItem项)
{
oValues.Add(项目价值);
}
OriginalDropDownValues=oValues.ToArray();
}
}
//回邮2
private void RemoveExtraItemsFromList()
{
列表值stokill=新列表();
var oItems=原始下降值;
foreach(MyDDL.Items中的ListItem currentItem)
{
如果(!oItems.Contains(currentItem.Value))
{
//尚无法删除项,将修改我们正在迭代的集合
valuesToKill.Add(currentItem.Value);
}
}
foreach(valuesToKill中的var killVal)//循环kill值并从下拉列表中查找并删除每个值。
{
MyDDL.Items.Remove(MyDDL.Items.FindByValue(killVal));
}
}
已尝试MyDDL.Items.Clear();然后添加默认值Pandiya,该值不回答问题..Clear将删除所有项目。该问题不会处理相同的问题-要保留的问题是已知的(即第一个)。在这种情况下,需要有其他方法来确定哪些项目需要保留,哪些项目需要删除。不确定是否有简单的非黑客解决方案。显然,如果您需要使用该值,则此解决方案将根本不起作用。
public string[] OriginalDropDownValues
{
get
{
return ViewState["origValues"] as string[];
}
set
{
ViewState.Add("origValues", value);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// get the values from the control and store them in viewstate
var oValues = new List<string>();
foreach (ListItem item in MyDDL.Items)
{
oValues.Add(item.Value);
}
OriginalDropDownValues = oValues.ToArray();
}
}
// on postback 2
private void RemoveExtraItemsFromList()
{
List<string> valuesToKill = new List<string>();
var oItems = OriginalDropDownValues;
foreach (ListItem currentItem in MyDDL.Items)
{
if (!oItems.Contains(currentItem.Value))
{
// can't remove items yet, would modify collection we are iterating through
valuesToKill.Add(currentItem.Value);
}
}
foreach (var killVal in valuesToKill)//loop kill values and locate+remove each from drop down.
{
MyDDL.Items.Remove(MyDDL.Items.FindByValue(killVal));
}
}