有没有一种方法可以在不使用 JavaScript 的情况下在 ASP.NET 中使用数字 updown?
如果没有,是否有替代方案?
我试图做同样的事情,结果发现 asp 文本框有一个选项。对我有用的是:
<asp:TextBox TextMode="Number" runat="server" min="0" max="20" step="1"/>
这给了我一个文本框,当鼠标悬停在它上面或获得焦点时,它会显示上下控件,并且只允许从最小值到最大值的数字。它的工作原理与
<input type="number" min="0" max="20" step="1" />
请查看 Ajax 控制工具包
http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/NumericUpDown/NumericUpDown.aspx
<ajaxToolkit:NumericUpDownExtender ID="NUD1" runat="server"
TargetControlID="TextBox1"
Width="100"
RefValues="January;February;March;April"
TargetButtonDownID="Button1"
TargetButtonUpID="Button2"
ServiceDownPath="WebService1.asmx"
ServiceDownMethod="PrevValue"
ServiceUpPath="WebService1.asmx"
ServiceUpMethod="NextValue"
Tag="1" />
还可以考虑使用NuGet添加引用PM> Install-Package AjaxControlToolkit
我认为以下 html 可以回答您的问题:
<head runat="server">
<title>Numeric Up Down</title>
<script type="text/jscript">
function Load() {
/*numericUpDown1.value = or*/ document.getElementById("numericUpDown1").value = parseFloat(document.getElementById("<%=NumericUpDown1.ClientID%>").value);
}
function Change() {
document.getElementById("<%=NumericUpDown1.ClientID%>").value = document.getElementById("numericUpDown1").value; //or numericUpDown1.value
}
</script>
</head>
<body onload="Load()">
<form id="form1" runat="server">
<div>
<input type="number" id="numericUpDown1" onchange="Change()" />
<asp:HiddenField ID="NumericUpDown1" runat="server" />
</div>
</form>
</body>
然后在 C# 或 Visual Basic 中的 asp 服务器端代码中,您可以将该 HiddenField 视为 NumericUpDown,但请注意,他的值是字符串,而不是十进制,如 System.Windows.Forms.NumericUpDown 控件、浮点数或双精度数,或 int,因此您必须将其解析为其中一种类型才能满足您的需求。
如果你想设置数字上下的样式,那么在 javascript 中它很简单。只需设置document.getElementById("numericUpDown1").style,但是如果你想通过C#或Visual Basic中的asp服务器端代码来做,那么html必须不同:
<head runat="server">
<title>Numeric Up Down</title>
<script type="text/jscript">
function Change() {
document.getElementById("<%=NumericUpDown1.ClientID%>").value = document.getElementById("numericUpDown1").value; //or numericUpDown1.value
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<% this.Response.Write(string.Format("<input type='number' id='numericUpDown1' value='{0}' onchange='Change()' style='{1}' />", this.NumericUpDown1.Value, this.numericUpDown1Style)); %>
<asp:HiddenField ID="NumericUpDown1" runat="server" />
</div>
</form>
</body>
numericUpDown1Style是一个受保护的字段,其类型是在 C# 或 Visual Basic 的 asp 服务器端代码中定义的字符串。
如果你想给它一个类而不是给它设置样式,那么 html 必须是:
<head runat="server">
<title>Numeric Up Down</title>
<script type="text/jscript">
function Change() {
document.getElementById("<%=NumericUpDown1.ClientID%>").value = document.getElementById("numericUpDown1").value; //or numericUpDown1.value
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<% this.Response.Write(string.Format("<input type='number' id='numericUpDown1' value='{0}' onchange='Change()' class='{1}' />", this.NumericUpDown1.Value, this.numericUpDown1CssClass)); %>
<asp:HiddenField ID="NumericUpDown1" runat="server" />
</div>
</form>
</body>
numericUpDown1CssClass是一个受保护的字段,其类型是在 C# 或 Visual Basic 的 asp 服务器端代码中定义的字符串。
如果你想给它设置样式并给它一个类,那么 html 就像 html #2 或 html #3,但唯一的变化是在以下行中:
<% this.Response.Write(string.Format("<input type='number' id='numericUpDown1' value='{0}' onchange='Change()' style='{1}' class='{2}' />", this.NumericUpDown1.Value, this.numericUpDown1Style, this.numericUpDown1CssClass)); %>
我想你知道#2 和 #3中的numericUpDown1Style和numericUpDown1CssClass是什么
推荐提示:
如果您的网站包含许多在您的 ASP 服务器端代码中使用的数字上下控件,并且以这种方式创建所有这些控件是不利的,那么您可以将新的“Web 用户控件”项目添加到您的网站并为其命名“数字上下”。然后在其源 html 中,您可以复制我在上面发布的 html #1 或 html #2 或 html #3 或 html #4 (取决于您是否要设置数字样式,或者是否给它一个类, 或两者兼有) 进行了一些删除和更改,因为它不是“WebForm”,而是“Web 用户控件”,并且在 asp 服务器端代码中具有以下属性(它们在 C# 中,但如果您使用 Visual Basic,我认为您翻译代码不会有问题):
public decimal Value
{
get
{
return decimal.Parse(this.HiddenField.Value);
}
set
{
this.HiddenField.Value = value.ToString();
}
}
//Like the System.Windows.Forms.NumericUpDown.Value, but if you dislike 'decimal', and you want other type, then you can change the return type and the type Parse.
//Note that the ID of the HiddenField is simply "HiddenField", and not "NumericUpDown1", so make sure in the Source html to rename "NumericUpDown1" to "HiddenField", but probably you would like a different ID, so if you gave it different ID, then ensure that in the code you refer this HiddenField with the ID you chose, and not "HiddenField" or "NumericUpDown1".
//The following properties are for only if you want to style your Numeric Up Down:
protected string style;
public string Style
{
get
{
return this.style;
}
set
{
this.style = value;
}
}
//If you chose, copied, pasted and changed html #2 or html #4, then don't forget to replace this.numericUpDown1Style to this.Style in the source html of the Web User Control.
//Optional
public Unit Width
{
get
{
int startIndex = this.style.IndexOf("width") + 6;
if (index != -1)
{
int endIndex = this.style.IndexOf(';', startIndex);
return Unit.Parse(this.style.Substring(startIndex, endIndex - startIndex));
}
return Unit.Empty;
}
set
{
if (this.style.Contains("width"))
{
this.style = this.style.Replace("width:" + this.Width.ToString() + ';', "width:" + value.ToString() + ';');
}
else
{
this.style += "width:" + value.ToString() + ';';
}
}
}
//The same you can do with the Height property.
//You can replace all the style code with the CssClass code instead, or just add it:
protected string cssClass;
public string CssClass
{
get
{
return this.cssClass;
}
set
{
this.cssClass = value;
}
}
//If you chose, copied, pasted and changed html #3 or html #4, then don't forget to replace this.numericUpDown1CssClass to this.CssClass in the source html of the Web User Control.
如果您设置 NumericUpDown 的样式,那么还要知道在每个 ASP.NET 控件中,您可以在其 ID 之后键入 .Style["style"] = "value"。
如果您也希望能够使用 NumericUpDown 执行此操作,则将受保护字段样式的类型从字符串更改为MyStyle
有MyStyle的定义:
public class MyStyle
{
internal string style;
public string this[string style]
{
get
{
int startIndex = this.style.IndexOf(style) + style.Length + 1;
int endIndex = this.style.IndexOf(';', startIndex);
return this.style.Substring(startIndex, endIndex - startIndex)
}
set
{
this.style = this.style.Replace(style + ':' + this[style] + ';', style + ':' + value + ';')
}
}
}
将此类添加到 Web 用户控件的代码中,并更改 Style 属性:
public string Styles
{
get
{
return this.style.style;
}
set
{
this.style.style = value;
}
}
然后添加属性:
public MyStyle Style
{
get
{
return this.style;
}
}
并从以下位置更改行:
protected string style;
至:
protected readonly MyStyle style = new MyStyle();
不要忘记在 Web User Control 的源代码 html 中,将 this.Style 替换为 this.Styles。
注意:我没有耐心自己测试代码,所以它可能不起作用,所以你必须自己修复它。至少你明白我的想法。
修复后,您可以编辑我的答案并用您的固定代码替换错误的代码。
我会非常感激的!
这个 Web 用户控件就是您想要的 ASP NumericUpDown!
如果您停留在 .NET 4.0 上,并且想要使用原生 HTML5 输入类型“数字”(而不是 Ajax 控件工具包中的 NumericUpDown),则可以使用 ASP TextBox 控件与额外“类型”标签的组合:
<asp:TextBox runat="server" ID="txtMyTextBox" type="number" min="0" max="10" step="1"/>
如果你想阻止任何文本输入,你甚至可以从 Ajax Control Toolkit 添加一个 FilteredTextBoxExtender:
<ajaxToolkit:FilteredTextBoxExtender runat="server" TargetControlID="txtMyTextBox" FilterType="Numbers" />