根据这个How to access html controls in code behind,我应该能够将 'runat="server"' 添加到我的 html 元素中,如下所示:
<input type="email" id="email" runat="server" />
...然后通过 C# 中的 ID 访问 html 元素,如下所示:
String usersEmail = email.Value;
但是,尝试这样做会导致“当前上下文中不存在名称‘电子邮件’ ”
试图从代码隐藏中访问 html 元素以进行操作真的是一个失败的原因吗?
更新
在回答/响应史蒂夫布鲁克斯的建议时,这是我在 ascx 文件顶部的内容:
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="PostTravelWizardWebPartUserControl.ascx.cs"
Inherits="PostTravelWizard.PostTravelWizardWebPart.PostTravelWizardWebPartUserControl" %>
...而布鲁克斯先生推荐这样的东西:
<%@Page Language="C#" AutoEventWireup="false" CodeFile="Default.aspx.cs"
Inherits="_Default"%>
这足够接近吗?IOW,而不是“Page”,我有“Control”(它源自 UserControl);我有“CodeBehind”而不是“CodeFile”,我的继承不同。
我尝试将AutoEventWireup切换为 false,但没有任何区别。
更新 2
谢谢索林,
我不知道这个要求(将所有内容都包含在“表单”标签中),但即使这样做了:
<form id="formPostTravel" runat="server">
. . . (all the html elements)
</form>
...没什么区别; 我仍然得到,“名称'电子邮件'在当前上下文中不存在”
更新 3
对 Steve Brookes 建议的另一个回应是“将 CodeBehind 更改为 CodeFile 并添加一个 Inherits 属性,该属性应与您的代码隐藏文件的类名相匹配。另一个建议是将 ID 更改为 EmailAddress 或其他东西,因为它可能是某种与保留字的命名冲突!”:
首先,我将 CodeBehind 更改为 CodeFile
然后,我验证了 Inherits 属性与我的代码隐藏文件的类名匹配。该文件是:
namespace PostTravelWizard.PostTravelWizardWebPart
{
public partial class PostTravelWizardWebPartUserControl : UserControl
...继承值是“ PostTravelWizard.PostTravelWizardWebPart.PostTravelWizardWebPartUserControl ”
最后,我还将 HTML 元素的 ID 从“email”更改为“emailaddress”:
<input type="email" id="emailaddress" runat="server" />
...但现在我得到了,“名称'emailaddress'在当前上下文中不存在”
更新 4
有关这里正在尝试的内容的一些背景信息。
这是在 *.ascx 文件中的 html 块中定义“电子邮件”输入的位置:
<input type="email" id="emailaddress" runat="server" />
这是我尝试从相应的 *.ascx.cs 文件中访问其值的方式:
namespace PostTravelWizard.PostTravelWizardWebPart
{
public partial class PostTravelWizardWebPartUserControl : UserControl
{
. . .
String usersEmail = emailaddress.Value;
但我得到了奖励,“当前上下文中不存在名称‘emailaddress’ ”
更新 5
遵循 Steven Brookes 的建议:
您可以右键单击 ascx 文件并查看设计器,然后更改为查看代码。这很可能会重新生成设计器文件
我能够将一些字段放入designer.cs;其他人(大多数)因为他们开始“隐藏”?我不知道...