我在HTML页面上有一个表单,其中有多个提交按钮,可执行不同的操作.但是,当用户在文本输入中键入值并点击输入时,浏览器通常表现为按顺序激活下一个提交按钮.我想要一个特定的动作发生,所以我发现一个解决方案是在有问题的文本输入后直接将不可见的提交按钮放入HTML中,如下所示:
<input type="text" name="something" value="blah"/>
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
Run Code Online (Sandbox Code Playgroud)
这在大多数浏览器中都很有魅力,除了它在Safari和Chrome等webkit浏览器中没有.出于某种原因,他们跳过了隐形提交按钮.我一直试图弄清楚如何拦截输入键按下并使用Javascript激活正确的提交,但我无法让它工作.拦截keydown并将注意力集中在正确的提交上是行不通的.
有没有办法使用Javascript或其他方式选择当用户点击HTML表单上的文本输入中的回车键时将使用哪个提交按钮?
编辑:为了澄清,表单不能要求Javascript从根本上"工作".如果在webkit浏览器上没有Javascript,我不在乎输入密钥提交是否是不可取的,但是我无法删除或更改提交按钮的顺序.
这是我尝试过的,它不会改变webkit浏览器中的提交行为.
有用的是将以下代码中的focus()更改为click().
document.onkeypress = processKey;
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click(); // previously: focus()
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:最终解决方案:
适用于每个浏览器,只在需要时拦截输入密钥:
HTML:
<input type="text" name="something" value="blah"
onkeydown="return processKey(event)" />
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input …Run Code Online (Sandbox Code Playgroud) 我在页面中有多个下拉列表,如果用户选择一个禁用全部的复选框,则要禁用所有.到目前为止,我有这个代码,它无法正常工作.有什么建议?
foreach (Control c in this.Page.Controls)
{
if (c is DropDownList)
((DropDownList)(c)).Enabled = false;
}
Run Code Online (Sandbox Code Playgroud) 当附加到文本框的必填字段验证器未通过客户端验证时,如何执行某些javascript?我想要做的是更改文本框的css类,使文本框的边框显示为红色.
我正在使用webforms,我确实可以使用jquery库.
我很难将具有自定义用户控件的页面直接修改为ASPX页面,现在需要在需要时动态加载它.用户控件通过ASCX文件具有html和其他控件,并在代码隐藏中具有代码.
我已阅读多个页面,并发现我无法直接实例化用户控件但应使用Page.LoadControl(...).问题不在于编译,但是当页面加载控件时,ASCX内的所有控件都会为空,然后崩溃.
如何在ASCX和代码隐藏中动态使用具有代码的用户控件?
我在做什么的例子(PageLoad或PagePreRender或PagePreInit)
Control c = LoadControl(typeof(MyControl), null);
myControl= (MyControl)c;
myControl.ID = "123";
myControl.Visible = false;
Controls.Add(myControl);
Run Code Online (Sandbox Code Playgroud)
MyControl确实有例如<div id="whatever" runat="server">......并且在MyControl中它将可见性设置为True或False ...但是当它这样做时,现在它崩溃了,因为"whatever"div是NULL.
尝试实施新的内容页面时有一个"duh"时刻
这是结构
Master Page
---- Nested Master Page
-------- Nested Master's Content Page
Run Code Online (Sandbox Code Playgroud)
标记:
母版页
<asp:ContentPlaceHolder ID="bodyContent" runat="server">
</asp:ContentPlaceHolder>
Run Code Online (Sandbox Code Playgroud)
嵌套母版页
MasterPageFile="~/Views/Shared/Administrator.Master"
<asp:Content ID="Content2" CotentPlaceHolderID="bodyContent" runat="server">
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
嵌套大师的内容页面
MasterPageFile="~/Views/Intervention/InterventionMaster.master"
<asp:Content runat="server" ID="myContent" ContentPlaceHolderID="Content2">
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
收到错误:
在母版页'/Views/Intervention/InterventionMaster.master'中找不到ContentPlaceHolder'Content2',在内容页面中验证内容控件的ContentPlaceHolderID属性.
我能做错什么?
有很多关于ASP.NET WebForms和ASP.NET MVC之间差异的文章和讨论比较了两个框架的相对优点.
对于那些使用WebForms的人来说,我有一个不同的问题,那就是转移到MVC:
WebForms的首要任务是什么,MVC没有,你真的错过了什么?
没人提到WebForms验证控件.我现在正在研究一些具有一些依赖验证规则的代码,并且实现客户端验证这些代码的速度很慢.
如果您预编译一个网站并保持其可更新,ASP.NET解析器可以从Page指令看到没有代码文件或代码隐藏以及在哪里找到基类(继承属性).
<%@ page language="C#" autoeventwireup="true" inherits="_Default, Precompiled"
theme="Default" validaterequest="false" %>
Run Code Online (Sandbox Code Playgroud)
如果站点是预编译的并且不可更新,则bin文件夹中的.compiled文件应该为ASP.NET运行时提供有关如何实例化页面类的所有必要信息.
那么为什么需要预编译的App.config 呢?
谢谢!
我在我公司的网站上有一个竞赛入口页面.为了参加比赛,您创建一个登录名,这只是一封电子邮件和一个4位数的图钉.这是PIN字段:
<input type="password" name="contest_pin" id="contest_pin" maxlength="4" />
Run Code Online (Sandbox Code Playgroud)
当用户提交表单时,帐户将在我们的数据库中创建,然后他们会收到一封电子邮件(我已复制),其中包含他们创建的电子邮件地址和PIN.
问题在于:在我测试过的每个浏览器中(Mac上的Safari/Chrome/Firefox,Linux上的Chrome/Firefox,Windows上的IE7/8/9)我都不能在该PIN字段中输入4位以上的数字.然而,我收到的几封电子邮件显示用户创建了一个超过4个字符的引脚.
这怎么可能?是否有不支持maxlength的浏览器?我没有在Opera或任何移动浏览器上测试过.如果它们的引脚长度超过4位,那就没什么大不了的了.数据库将接受更多.我只是想知道他们是如何设法绕过maxlength的.
编辑添加
有太多的答案基本上对我说同样的事情来对所有人做出回应.我知道我应该总是对任何重要的事情进行服务器端验证,并且我们确实有PHP代码清理我们的数据,如果它非常重要,我也会有PHP代码强制执行4位数的限制.对我们而言,它们只有4个字符并不重要,所以我没有强制执行它.我只是想知道为什么maxlength属性没有按照它的设计去做,这会阻止用户输入超过一定数量的字符.对于那些提出恶意脚本或Firebug的人,我可以100%肯定不是这种情况.只有我们网站的注册用户(仅限于一个非常具体的企业会员名单)甚至可以进入比赛入口页面,我可以保证该名单上的大约100人中没有一个会故意试图规避输入类型属性.
我无法找到如何为输入[数字]定义步长值和精度
1.01在我指定步骤之前被认为是无效的0.01.但在这种情况下,我无法指定具体步骤.
与大数字相同的问题.如果我指定步骤1000和用户类型,则1001该值被视为无效 ...
您可以查看此示例
我有一个用户控件,其中包含ListView使用模型绑定的用户控件.到现在为止还挺好.我想根据用户操作视图模式的方式显示对象列表.为此,我有一个名为Roles的公共财产.但是,当我TryUpdateModel()从里面打电话时,我收到了异常:
TryUpdateModel'必须传递给值提供者,或者必须从使用模型绑定进行数据绑定的控件的数据操作方法内部调用
现在,虽然我明白我可以通过执行以下操作退出编辑模式:
lvData.EditIndex = -1;
Run Code Online (Sandbox Code Playgroud)
然后在UpdateMethod通话中TryUpdateModel(),我想知道如何TryUpdateModel在不必连接方法进行更新的情况下调用.换句话说,如何/在哪里/我为IValueProvider参数提供什么TryUpdateModel().
/// <summary>
/// Initialise the user control
/// </summary>
/// <param name="aRoles">List of roles to display</param>
public void Activate(List<RoleInfo> aRoles)
{
//List we will be binding
_ViewModel = new List<MembershipRolesViewModel>();
//Transfer the supplied list into the view model
foreach (RoleInfo roleInfo in aRoles)
{
_ViewModel.Add(new MembershipRolesViewModel
{
RoleDisplayName = roleInfo.RoleDisplayName,
RoleHint = roleInfo.RoleHint,
RoleName = roleInfo.RoleName,
RoleSelected …Run Code Online (Sandbox Code Playgroud) webforms ×10
asp.net ×6
html ×3
javascript ×3
c# ×2
asp.net-mvc ×1
dynamic ×1
html5 ×1
input ×1
jquery ×1
master-pages ×1
maxlength ×1
precompiled ×1
submit ×1
user-input ×1
validation ×1