Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从我自己的web控件获取价值_C#_Asp.net - Fatal编程技术网

C# 从我自己的web控件获取价值

C# 从我自己的web控件获取价值,c#,asp.net,C#,Asp.net,我写了一个例子来在ASP.NET From上创建自己的控件。控件非常简单-组合框和按钮。用户需要选择值,提交按钮后,组合框中的值需要显示在标签中。 所以我的控制代码: public class MyControl:Control,IPostBackEventHandler { protected override void Render(HtmlTextWriter writer) { writer.AddAttribute("size","1");

我写了一个例子来在ASP.NET From上创建自己的控件。控件非常简单-组合框和按钮。用户需要选择值,提交按钮后,组合框中的值需要显示在标签中。 所以我的控制代码:

public class MyControl:Control,IPostBackEventHandler
{
    protected override void Render(HtmlTextWriter writer)
    {
        writer.AddAttribute("size","1");
        writer.AddAttribute("ID","List2");
        writer.AddAttribute("name", "ListYear");
        writer.RenderBeginTag(HtmlTextWriterTag.Select);

        for (int i = 1950; i < DateTime.Now.Year; i++)
        {
            writer.RenderBeginTag(HtmlTextWriterTag.Option);
            writer.WriteEncodedText(i.ToString());
            writer.RenderEndTag();
        }

        writer.RenderEndTag();

        writer.AddAttribute("type","submit");
        writer.AddAttribute("value","ClickMe");
        writer.AddAttribute("name","BtnChange");
        writer.RenderBeginTag(HtmlTextWriterTag.Input);
        writer.RenderEndTag();

        base.Render(writer);
    }

    public delegate void OnClickEventHandler(object sender, EventArgs args);

    public event OnClickEventHandler Click;

    public void RaisePostBackEvent(string eventArgument)
    {
        Click(this, new EventArgs());
    }
}
用什么来代替从列表中获取值的问号


另外,有些奇怪的事情正在发生。因为当我单击按钮时,不会调用处理程序,而且我无法进入Unnamed1_OnClick

您需要传递组合框的名称及其所选文本的值

像这样:

protected void Unnamed1_OnClick(object sender, EventArgs args)
{
    Label1.Visible = true;
    Label1.Text="You choose "+ myCustomControl.SelectedItem.Value.ToString() 
    + " year";
}

(很抱歉,我误读了最初的帖子,并在意识到错误后对代码进行了相应的编辑。)

使用name=“YourSelectList”将选择列表添加到用户控件中

然后在click事件处理程序中

protected void Unnamed1_OnClick(object sender, EventArgs args)
    {
        Label1.Visible = true;
        Label1.Text="You choose "+Control1.YourSelectList.SelectedValue.ToString()+" year";
    }

由于您已在属性上设置了值,因此要检索它,您需要访问
属性
属性

使控件继承自
HtmlControl

public class MyControl : HtmlControl, IPostBackEventHandler
{
    ...
在你的页面上

<MyContrl:MyControl runat="server" OnClick="Unnamed1_OnClick" ID="Control1"></MyContrl:MyControl>

您可以调试此行以查看所有可用属性

如果您的自定义控件似乎无法从中获取文本。添加一个方法或字段,然后调用它。引用您的控件或将
发送者
转换为控件的类型,并访问要在
标签
中显示的属性。您的意思是这样吗?标签1.可见=真;Control1.属性[“值”];但此代码抛出错误:“Hello.MyControl”不包含“Attributes”的定义,也没有扩展名method@JonMaximys与其继承
控件
更改为
HtmlControl
,不如将其作为字符串使用。Label1.Text=HtmlControl.Attributes[“value”];抛出错误非静态字段、方法或属性“System.Web.UI.HtmlControl.HtmlControl.Attributes.get”需要对象引用。我添加了名称,但在写入Control1时。->我只看到像OnClickEventHandler和RaisePostBackEvent这样的公共方法
public class MyControl : HtmlControl, IPostBackEventHandler
{
    ...
<MyContrl:MyControl runat="server" OnClick="Unnamed1_OnClick" ID="Control1"></MyContrl:MyControl>
Label1.Text = Control1.Attributes["value"];