将值从页面传递到用户控件

11

我在主页面上将名字和姓氏存储在两个标签中。我也在一个类中保存了这些值(这个类并不做太多事情,但我会在未来扩展时使用它们)。我有一个用户控件,它将以名字和姓氏作为邮件正文进行发送。

我的问题是如何将标签或类变量的值传递到用户控件的正文变量中?


用户控件是在哪个环境中创建的? - Sai Kalyan Kumar Akshinthala
对不起,我对ASP.NET和C#都很新,您所说的“环境”具体指什么? - Bhrugesh Patel
这意味着用户控件是否属于Ajax? - Sai Kalyan Kumar Akshinthala
不是..它只是一个普通的ascx文件,里面有几个文本框和一个按钮。 - Bhrugesh Patel
5个回答

34
在您的用户控件上创建一个具有所需数据类型的属性,并在创建控件时在页面上填充它。
public class myUserControl : Control
    {
      ...
      public int myIntProperty {get; set;}
      ...
    }

稍后在代码后台,您可以像这样分配值:

myUserControl cntrl = new myUserControl();
    cntrl.myIntProperty = 5;

你可以通过Markup传递值,而不是像这样:

<uc1:myUserControl ID="uc1" runat="server" myIntProperty="5" />

在页面加载时,我如何获取myIntProperty的值? - Rushabh Master

3
你需要在你的控件上创建属性来保存这些值;然后在页面代码中,只需将这些值分配给控件中的属性即可。
在你的控件上,你可以像下面这样实现:
public string FirstName
{
  get {
     if (ViewState["FirstName"] == null)
        return string.Empty;
     return ViewState["FirstName"].ToString();

      }
      set {
           ViewState["FirstName"] = value;
      }
}

这是真的。如果你只是实现了get/set,而没有在该块之前正确处理 [Browsable(true), EditorBrowsable(EditorBrowsableState.Always), Bindable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [Description("Some description"), Category("Misc"), DefaultValue(string.Empty)],你永远无法使其正常工作。 - WLFree

3
您需要在控件上定义公共属性,然后当您在页面上使用控件时,可以将值传递给这些参数。
类似于以下内容:
<cc:mycustomControl runat="server" 
    MyProperty1=<%# label1 %>
    MyProperty2=<%# label2 %>
/>

这种方法在只有几个控件需要传递时是可以的, 但如果有大量的控件,则代码会变得混乱。 我不能以其他方式传递值吗? - Bhrugesh Patel
我不确定我理解了。为什么这很混乱?你说的“以另一种方式传递”是什么意思?你传递的方式的确切语法是否重要? - Petar Ivanov
不,我的意思是为每个属性编写一行代码会使代码变得更长。 我还是新手,所以我试图按照书本上的方法去做。代码越长,出错的机会就越多。 - Bhrugesh Patel
但是现在我想了想,通过赋值传递值仍然需要一行代码。 我也会尝试这个。 - Bhrugesh Patel
好的,那么把它们放在同一行上...我仍然不明白你如何期望在不传递参数的情况下将某些东西传递给控件(或函数)... - Petar Ivanov
不,我只是有点傻。刚刚匹配了所有可能的代码……设计不同但本质相同。我正在传递这个值……我必须这样做……不知道当时我在想什么……感谢你的帮助。真的帮我解决了我的问题。 - Bhrugesh Patel

1

步骤1:您可以将值公开为属性,然后轻松地使用它们。

步骤2:要从用户控件访问页面,您可以使用Parent属性或者可能需要使用一些自定义登录来访问父页面,然后编写代码以使用属性值。


我们的答案达成了妥协吗 :) - ViSu

0

你可以在你的用户控件中这样做

string x=((yourparentcontrol)this.parent).label1.text;

并使用字符串x


尝试过了,但是出现了错误。 当前上下文中无法使用关键字“this”。 - Bhrugesh Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接