gpt4 book ai didi

asp.net - WebForms 在自动回发期间不包括表单中的电子邮件输入类型

转载 作者:可可西里 更新时间:2023-11-01 13:10:09 26 4
gpt4 key购买 nike

我有一个 asp:TextBox在页面上:

<asp:TextBox ID="edEmail" runat="server" />

并且提交的表单带有正常的 <asp:Button>控制:

<asp:TextBox ID="edEmail" runat="server" />
<asp:Button ID="bbOK" Text="Save User" runat="server" OnClick="bbOK_Click" />

这些在客户端呈现为:

<input name="ctl00$MainContent$edEmail" id="ctl00_MainContent_edEmail"></input>
<input name="ctl00$MainContent$bbOK" id="ctl00_MainContent_bbOK"
type="submit" value="Save User"
onclick='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$bbOK", "", true, "", "", false, false))' >

当通过常规 <asp:Button> 提交表单时一切都正确发送。阅读 html 表单很痛苦,但是格式化的请求体是:

  • &ctl00%24MainContent%24edEmail = asdf%40here.net
  • &ctl00%24MainContent%24bbOK = Save+User

太好了,电子邮件地址将转到服务器。接下来我们将更改 type输入框的新html5 电子邮件类型。我们在为 .NET 4 Framework 安装适当的更新后执行此操作:

<asp:TextBox ID="edEmail" type="email" runat="server" />
<asp:Button ID="bbOK" Text="Save User" runat="server" OnClick="bbOK_Click" />

现在我们重复同样的过程。呈现的 HTML 是:

<input type="email" name="ctl00$MainContent$edEmail" id="ctl00_MainContent_edEmail" >
<input name="ctl00$MainContent$bbOK" id="ctl00_MainContent_bbOK"
type="submit" value="Save User"
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$bbOK&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" >

当我们提交表单时,电子邮件地址表单输入是存在的:

  • &ctl00%24MainContent%24edEmail = asdf%40here.net
  • &ctl00%24MainContent%24bbOK = Save+User

非常好,浏览器(IE11 和 Chrome 30-something)正在按预期提交表单内容。

接下来我们向页面添加一些东西来触发“自动回发”,一个<asp:RadioGroup> :

<asp:TextBox ID="edEmail" type="email" runat="server" />

<asp:RadioButtonList ID="rbAccountType" runat="server" AutoPostBack="true" OnSelectedIndexChanged="rbAccountType_IndexChanged">
<asp:ListItem>Windows</asp:ListItem>
<asp:ListItem Selected="True">Local</asp:ListItem>
</asp:RadioButtonList>
<asp:Button ID="bbOK" Text="Save User" runat="server" OnClick="bbOK_Click" />

这给出了呈现的 HTML:

<input type="email" name="ctl00$MainContent$edEmail" id="ctl00_MainContent_edEmail" >

<input id="ctl00_MainContent_rbAccountType_0" type="radio" name="ctl00$MainContent$rbAccountType" value="Windows" checked="checked"><label for="ctl00_MainContent_rbAccountType_0">Windows</label>
<input id="ctl00_MainContent_rbAccountType_1" type="radio" name="ctl00$MainContent$rbAccountType" value="Local"
onclick="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$rbAccountType$1\',\'\')', 0)">

<input name="ctl00$MainContent$bbOK" id="ctl00_MainContent_bbOK"
type="submit" value="Save User"
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$bbOK&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" >

但是当这个表单“auto-postsback”时,email 字段丢失了:

  • &ctl00%24MainContent%24rbAccountType = Local&__ASYNCPOST=true&

如果我更改电子邮件 输入的 type来自 emailtext :

<asp:TextBox ID="edEmail" runat="server" Type="text" />

呈现的单选按钮不受影响:

<input id="ctl00_MainContent_rbAccountType_1" type="radio" name="ctl00$MainContent$rbAccountType" value="Local" 
onclick="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$rbAccountType$1\',\'\')', 0)">

但是回传数据现在(正确地)包含了它应该包含的内容:

  • &ctl00%24MainContent%24edUsername = ian
  • &ctl00%24MainContent%24edFullname = Ian%20Boyd
  • &ctl00%24MainContent%24edDescription = foo
  • &ctl00%24MainContent%24edEmail = asdf%40here.net
  • &ctl00%24MainContent%24rbAccountType = Local&__ASYNCPOST=true&

如果我把它改回email :

<asp:TextBox ID="edEmail" runat="server" Type="email" />

它再次失败,未能包含 email输入类型

  • &ctl00%24MainContent%24edUsername = ian
  • &ctl00%24MainContent%24edFullname = Ian%20Boyd
  • &ctl00%24MainContent%24edDescription = foo
  • &ctl00%24MainContent%24rbAccountType = Local&__ASYNCPOST=true&

长长的

WebForms 是一个错误的架构,我应该在五年前停止使用它没有修复,Microsoft 也不会,所以我只是在寻求同情。 不支持 HTML 5。

WebForms 使用浏览器 不提交表单中的所有字段是做什么的?失败发生在 IE 和 Chrome 客户端。

附录

这个问题的题目叫email输入类型。但同样的错误发生在 number 上。输入类型;并且可能是所有 html5 输入类型。

在代码中标记超文本:

protected void Page_Load(object sender, EventArgs e)
{
edEmail.Attributes["type"] = "email";
edEmployeeID.Attributes["type"] = "number";

...
}

没有解决。表单在“自动回发” 提交期间仍然无法提交其包含的值(并在“常规”提交期间正确提交所有值)。

令人印象深刻的是,在提出问题 27 分钟后,谷歌搜索:

asp.net autopostback not including html5 input types

只给我作为遇到问题的人。显然我是唯一一个尝试将 HTML5 硬塞进 WebForms 的人。

最佳答案

在生成的 WebForms 客户端 Javascript 代码中发现了错误:

ScriptResource.axd

// Name:        MicrosoftAjaxWebForms.debug.js
// Assembly: AjaxControlToolkit
// Version: 3.5.50401.0
// FileVersion: 3.5.50401
// (c) 2010 CodePlex Foundation
_onFormSubmit: function PageRequestManager$_onFormSubmit(evt)
{
var count = form.elements.length;

for (i = 0; i < count; i++)
{
var element = form.elements[i];

var tagName = element.tagName.toUpperCase();

if (tagName === 'INPUT')
{
var type = element.type;
if ((type === 'text') ||
(type === 'password') ||
(type === 'hidden') ||
(((type === 'checkbox') || (type === 'radio')) && element.checked))
{
formBody.append(encodeURIComponent(name));
formBody.append('=');
formBody.append(encodeURIComponent(element.value));
formBody.append('&');
}
}
}
}

根据定义,WebForms 不会在回发期间在表单正文中输入 HTML5 输入类型。根据定义,它将仅支持少数原始输入类型:

  • 文本
  • 密码
  • 隐藏
  • 复选框
  • radio
  • 颜色 不支持
  • 日期 不支持
  • 日期时间 不支持
  • datetime-local 不支持
  • 电子邮件 不支持
  • 月份 不支持
  • 数量 不支持
  • 范围 不支持
  • 搜索 不支持
  • 电话 不支持
  • 时间 不支持
  • url 不支持
  • week 不支持

关于asp.net - WebForms 在自动回发期间不包括表单中的电子邮件输入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com