带有多个PostBackData的处理
在MSDN有关于IPostBackDataHandler的这样一个例子:
using System;
using System.Web;
using System.Web.UI;
using System.Collections.Specialized;
using System.ComponentModel;
namespace CustomComponents
{
[ToolboxData("<{0}:Textbox1 runat=server></{0}:Textbox1>"),
DefaultProperty("Text")]
public class Textbox1 : Control, IPostBackDataHandler
{
public string Text
{
get
{
object text = ViewState["Text"];
if (text == null)
return string.Empty;
else
return (string)text;
}
set
{
ViewState["Text"] = value;
}
}
public bool LoadPostData(string postDataKey,
NameValueCollection postCollection)
{
string postedValue = postCollection[postDataKey];
if (!Text.Equals(postedValue))
{
Text = postedValue;
return true;
}
else
return false;
}
public void RaisePostDataChangedEvent()
{
OnTextChanged(EventArgs.Empty);
}
protected virtual void OnTextChanged(EventArgs e)
{
if (TextChanged != null)
TextChanged(this, e);
}
public event EventHandler TextChanged;
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Page.VerifyRenderingInServerForm(this);
writer.Write("<INPUT type=/"text/" name=/"");
writer.Write(this.UniqueID);
writer.Write("/" value=/"" + this.Text + "/" />");
}
}
}
这个例子很清晰的演示了怎样处理回发数据。但值得注意的是,该控件中客户端PostBack回的值只有一个,即在Render方法中只能看到一个name为this.UniqueID的TextBox,如果有多个TextBox的name为this.UniqueID,即有多个回发值该怎么获得各个值呢?
我们修改Render,再给它添加一个Textbox:
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Page.VerifyRenderingInServerForm(this);
writer.Write("<INPUT type=/"text/" name=/"");
writer.Write(this.UniqueID);
writer.Write("/" value=/"" + this.Text + "/" />");
writer.Write("<INPUT type=/"text/" name=/"");
writer.Write(this.UniqueID);
writer.Write("/" value=/"" + this.Text + "/" />");
}
在LoadPostData中方法中设立断点,运行后在两个输入框中输入以下数据:
可以看到用string postedValue = postCollection[postDataKey];中postedValue值为121,asas,很明显,如果有多个PostBack值,这些值将以逗号隔开。