0

我遇到了一个问题,我还没有找到任何灵魂。让我稍微简化一下。

我有 2 个表单,第一个包含启用多选模式的 ASP ListBox。我提交了表单,并在我仅用于测试目的的其他表单中提交了这段代码:

protected void Page_Load(object sender, EventArgs e)
    {
        foreach (string formKey in Request.Form.AllKeys)
        {
            if (formKey != null)
            {
                if (formKey.Equals("ctl00$MainContent$ListBox1"))
                    Label1.Text = Request.Form[formKey];
            }
        }  
    }

问题是来自列表框的值(我在以前的表单中选择的值)用“,”分隔,例如。“测试1,测试2,测试3”。例如,如何将此分隔符更改为“$”?我需要更改它,因为实际值可能包含“,”并且我不会手动将它们提供给列表框。

我不能使用任何其他模式在表单之间传输此值,因为整个应用程序都使用此模型。然后将我获得的值发送到将被操作的工作流,并且在工作流中我需要知道每个列表框项目的开始和结束位置,因此它必须是唯一的分隔符。

任何帮助都将不胜感激!非常感谢你


谢谢 MatteKarla,但不幸的是这并不能解决我的问题。是的,这是将值从一种形式转移到另一种形式的好方法。

但是,我必须将上面描述的方法与请求表单键一起使用,因为列表框是在运行时生成的许多其他“参数”之一,并将它们的值发送到采用该值的工作流方法。我不能在我的应用程序中改变它。

我的问题是逗号(“ ,”)分隔符默认与多选列表框一起使用。

我认为可能有一种方法可以将该分隔符从 coma 更改为另一个 char,因为 coma 也可以包含在值本身中,这会造成混乱。

正如我所说,如果我选择三个值test1test2并且test3,我的方法的结果将是一个看起来像的字符串"test1,test2,test3"。不过a"test1$test2$test3"会好很多。

但我担心更改此默认分隔符是不可能的。我必须想一种方法来克服这个问题,比如在为列表框提供所有预期的昏迷值之前用其他一些字符替换列表框,以免造成混淆。但这不是一个很好的方法。

4

1 回答 1

0

在您的第一页/表单 ( First.aspx.cs) 上,使用列表框创建一个公共属性:

public ListBox PostedListBox { get { return ListBox1; } }

将按钮的 postback-url 设置为 Second.aspx

在 -directive 之后的 aspx 文件中的第二页@Page添加:

<%@ PreviousPageType VirtualPath="~/First.aspx" %>

然后在Form_LoadSecond.aspx.cs可以提取值:

if (PreviousPage != null)
{
    ListBox postedListbox = PreviousPage.PostedListBox;
    foreach (var index in postedListbox.GetSelectedIndices())
    {
        var itemText = postedListbox.Items[index].Text;
    }
}

或者您可以尝试使用以下方法定位控件:

if (PreviousPage != null)
{
  var control = PreviousPage.FindControl("ListBox1") as ListBox;
}

第三次编辑:

您可以使用 GetValues:

Request.Form.GetValues("ctl00$MainContent$ListBox1");

返回包含每个选定项的字符串数组。

于 2011-09-19T22:33:32.773 回答