我遇到了一个问题,但我还没有找到任何灵魂。让我简化一下。
我有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];
}
}
}
问题是来自列表框的值(我在上一个表单中选择的值)用“,”分隔,例如。 “TEST1,TEST2,TEST3”。我怎样才能将此分隔符更改为“$”?我需要更改它,因为实际值可能包含“,”,我不会手动将它们提供给列表框。
我不能使用在表单之间传输此值的任何其他模式,因为整个应用程序使用此模型。我得到的值然后被发送到将被操纵的工作流程,并且在工作流程中我需要知道每个列表框项目的开始和结束位置,因此它必须是唯一的分隔符。
任何帮助都是相关的!非常感谢你
谢谢MatteKarla,但不幸的是,这并没有解决我的问题。是的,这是将值从一种形式转移到另一种形式的好方法。
但是我必须使用上面描述的方法和请求表单键,因为列表框是在运行时生成的许多其他“参数”之一,并将其值发送到采用此值的工作流方法。我不能在我的申请中改变它。
我的问题是默认情况下使用昏迷(“,
”)分隔符与多选列表框。
我认为可能有一种方法可以将该分隔符从昏迷变为另一个char,因为昏迷也可以包含在值本身中,这会造成混淆。
正如我所说,如果我选择三个值test1
,test2
和test3
,我的方法的结果将是一个类似"test1,test2,test3"
的字符串。但是"test1$test2$test3"
会更好。
但我担心更改此默认分隔符是不可能的。我必须考虑一种方法来克服这个问题,比如在将列表框中的所有预期昏迷与其他一些字符串进行替换之前进行替换,以免造成混淆。但这不是一个好方法。
答案 0 :(得分:0)
在您的第一页/表单(First.aspx.cs
)上创建一个包含列表框的公共属性:
public ListBox PostedListBox { get { return ListBox1; } }
将按钮的postback-url设置为Second.aspx
@Page
- 指令后的aspx文件中的第二页添加:
<%@ PreviousPageType VirtualPath="~/First.aspx" %>
然后在Form_Load
Second.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");
返回包含每个所选项的字符串数组。