2010-01-30 70 views
1

我有一个主页面,其中有一个<form runat="server">行和一个ContentPlaceHolder。如何从ASP .NET中的内容页面获取表单值

我想创建一个内容页面使用这个母版页,其中有文本框。但是我无法使用该页面中使用Request.Form["textbox"]的文本框的值。我需要使用Request.Form["ctl00$ContentPlaceHolder1$textbox"]

这是正常的做法吗?如果不是我可能会做错什么?

顺便说一下,我使用相同的内容页面来处理表单值。

所以我想我的问题其实是:我如何在同一内容页面中访问内容页面的表单值?

回答

1

对于ASP.NET,您并不是真的应该知道或关心HTTP请求和发布的表单值。这个框架封装了这些东西,使您可以将您的TextBox作为Windows GUI环境中的一个组件来处理。

在代码中,你能够获得并利用其Text属性设置其值为:

string whatsInThatBox = myTextBox.Text; 
myTextBoxText = "Now, let's write something else here..."; 

通常情况下,你应该只关心呈现<input>元素的神秘的名称和ID,如果您需要添加引用元素的客户端代码。

1

假设你有标准的ASP.Net控件,您可以在代码中使用

Dim x as string = Me.txtMyTextBox.Text 

如果你想在脚本中使用它,它是非常类似的访问背后的控件的值

<% 

Dim x as string = Me.txtMyTextBox.Text 

%> 

您不需要使用Request.Form,因为这些控件的值保留在页面的ViewState中。

+0

谢谢。下次我应该尝试模拟Windows窗体的网页表单。我的头脑仍然是HTML术语。 – slhsen 2010-01-30 13:45:24

+0

@prometeus:如果您已经了解HTML和HTTP,则可能需要考虑将ASP.NET MVC作为Web窗体的替代方案。 – 2010-01-30 13:53:47

0

您可以进行控制访问,带他们出去的设计师,让他们在公共你的母版页的代码隐藏文件:

public MyMasterPageClass 
{ 
    public TextBox textbox; 
} 

要访问的内容页面:

var text = ((MyMasterPageClass)Master).textbox.Text; 

或者,在你contentpage的标记使用@MasterType directive

<%@ MasterType VirtualPath="~/masters/MyMasterPage.master”" %> 

,并在页面,你不需要投:

var text = Master.textbox.Text; 
0

你可以做一个用户控件(包括文本框),那么公共属性添加到该控件返回文本框中的字符串值。将母版页上的文本框替换为该用户控件,然后您可以从任何内容页面获取该属性。