C# 将文本框值从用户控件文件传递到另一个类文件

C# 将文本框值从用户控件文件传递到另一个类文件,c#,asp.net,C#,Asp.net,我希望将值从ascx.cs用户控件文件传递到项目中的另一个类文件。我需要能够从用户控件获取动态文本框的值,以便能够将它们放入数据库中 这是我到目前为止所拥有的 用户控制文件 public void Page_Load(object sender, EventArgs e) { ItemBox.Text = Request.Form[ItemBox.UniqueID]; NumberBox.Text = Request.Form[NumberBox.Uniq

我希望将值从ascx.cs用户控件文件传递到项目中的另一个类文件。我需要能够从用户控件获取动态文本框的值,以便能够将它们放入数据库中

这是我到目前为止所拥有的

用户控制文件

public void Page_Load(object sender, EventArgs e)
    {
        ItemBox.Text = Request.Form[ItemBox.UniqueID];
        NumberBox.Text = Request.Form[NumberBox.UniqueID];
        DescriptBox.Text = Request.Form[DescriptBox.UniqueID];


    }
public void Page_Load(object sender, EventArgs e)
{
    Session["ItemBox"] = Request.Form[ItemBox.UniqueID];
    Session["NumberBox"] = Request.Form[NumberBox.UniqueID];
    Session["DescriptBox"] = Request.Form[DescriptBox.UniqueID];
}
其他类文件

 ViewState[VIEWSTATEKEY] = int.Parse(ViewState[VIEWSTATEKEY].ToString()) + 1;
        LoadPageControls();
        RowID ++;

        string box1value = Request.Form[ItemBox.Text];
        string box2value = Request.Form[NumberBox.UniqueID];
        string box3value = Request.Form[DescriptBox.UniqueID];

        string sConnection = generic database address;
我见过其他人使用get方法来获取数据。但是我不能得到正确的语法,它不断地给出错误

我尝试了这个,因为我在这里看到它,并认为它会工作,但没有乐趣

string box1value{ get {return ItemBox.Text;} }

很可能我在这里遗漏了一些简单的东西,但我已经在这个问题上纠缠了好几个星期了,这让我很难完成这个项目,所以如果您能提供任何帮助,我将不胜感激

不能在其他类文件中使用
Request.Form[]
。最好创建另一个实体类,其中包含存储值所需的尽可能多的属性。在aspx.cs中创建该类的对象并填充这些值。现在,在从另一个类调用方法时传递此对象


你运行代码了吗
ViewState
不应被除aspx.cs文件以外的任何类文件访问。

您的属性
box1value
当前是
private
,因为您没有提到任何访问修饰符。您应该向其添加
public
修饰符:

public string box1value{ get {return ItemBox.Text;} }

试试这个,这不是最好的选择,但我会努力的

**用户控制文件

public void Page_Load(object sender, EventArgs e)
    {
        ItemBox.Text = Request.Form[ItemBox.UniqueID];
        NumberBox.Text = Request.Form[NumberBox.UniqueID];
        DescriptBox.Text = Request.Form[DescriptBox.UniqueID];


    }
public void Page_Load(object sender, EventArgs e)
{
    Session["ItemBox"] = Request.Form[ItemBox.UniqueID];
    Session["NumberBox"] = Request.Form[NumberBox.UniqueID];
    Session["DescriptBox"] = Request.Form[DescriptBox.UniqueID];
}
**其他类文件

var ItemBox = (Session["ItemBox"] ?? "").ToString();
var NumberBox= (Session["NumberBox"] ?? "").ToString();
var DescriptBox= (Session["DescriptBox"] ?? "").ToString();

这在一开始就解决了错误,但它仍然说“item box在此上下文中不存在”,我假设这意味着它无法从其他类获取它,您必须在拥有
ItemBox
控件的类中声明此属性,只有这样,您才能提取它的
文本
Ok,我声明这是用户控件类,它不会给我任何错误。然后如何将该值添加到我的主类中?将static关键字也添加到属性中:
public string box1value{get{return ItemBox.Text;}}
现在,当我将静态值添加到字符串中时,只要通过
UserControl.box1value
可以访问
UserControl
即可访问该值,它给了我一个错误,说“非静态字段、方法或属性需要对象引用”,然后当我尝试使用上面提供的方法在主类中创建字符串时,它给了我相同的消息
string Item=UserControlPart2.box1value您的代码显示
box1value
是只读属性。您是如何为其赋值的???发布您尝试运行的代码,并输入准确的错误消息。不要用一些写得不好的代码来混淆我们。如果你想要一些全局可访问的值,那么就把它放进去session@nikhilsreeni我确实读过关于会话值的内容,但我不确定它们是如何使用的。我已经运行了代码。唯一的问题是,我需要使用此视图状态,因为我需要动态创建行,因为用户必须能够向表中添加新行,同时保留他们输入到表中的以前数据。我尝试的任何其他方法都是,每次在表中创建新行时,数据都会被擦除,这可以从aspx.cs页面本身完成。为什么需要另一个类来添加动态行?我在互联网上找到了这种方法,它很好地满足了我的需要。但它并没有很好地解释如何从viewstate中提取数据,将其添加到数据库中,这正是我的问题所在,他们也没有使用单独的类文件,因为在这种情况下不需要它。在aspx.cs文件本身中只创建了一个单独的方法。我猜您的问题是将值传递给另一个类文件。但是你没有提到这一点!这很有效。我只需要用所有(!IsPostBack)方法修改一下放在哪里,使它有点混乱。非常感谢你的帮助