Goodmorning Guys, 我在验证文本框中的值时遇到问题。我有一个包含3个阶段的下拉列表。在选择其中一个时,下面的文本框将填充以下百分比:20,40和60.还必须可以手动插入百分比,以便我在其中放置一个会话。但是这个值不能低于从下拉列表中选择的百分比。现在我的代码是这样的:
protected void Page_Load(object sender, EventArgs e)
{
string txt = txtpercents.Text;
Session["percents"] = txt;
int ddlchoise = Convert.ToInt32(ddlPhase.SelectedIndex);
if (ddlchoise == 1)
{
txtpercents.Text = "20";
}
if (ddlchoise == 2)
{
txtpercents.Text = "40";
}
if (ddlchoise == 3)
{
txtpercents.Text = "60";
}
}
private void InsertObj()
{
int percents = Convert.ToInt32(txtpercents.Text);
int attemp = Convert.ToInt32(Session["percent"]);
if (attemp > percents )
{
txtpercents.Text = (string)Session["percent"];
Theobject.Percent = int.Parse(txtpercents.Text);
}
}
这有效,但是当手动输入的值低于下拉列表中的选定阶段时,我必须填充错误消息或验证。 谁可以帮助我?谢谢!
答案 0 :(得分:1)
您应该使用CustomValidator
:
ASPX:
<asp:CustomValidator ID="CustomValidator1"
runat="server"
ControlToValidate="txtpercents"
ErrorMessage="Only 20,40 or 60 are allowed for percents"
OnServerValidate="CustomValidator1_ServerValidate">
</asp:CustomValidator>
代码隐藏:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
string[] allowed = { "20", "40", "60" };
args.IsValid = allowed.Contains(txtpercents.Text.Trim());
}
您还可以使用javascript对ClientValidationFunction
进行检验,有关详细信息,请参阅documentation。
如果您想要一种动态方法,即使有人将其他百分比添加到DropDownList
并忘记将其添加到ServerValidate
:
int percent;
var allowed = ddlchoise.Items.Cast<ListItem>()
.Select(li => li.Text)
.Where(t => int.TryParse(t, out percent));
更新 acc。评论:
我想要做的是:如果用户选择阶段2而不是te文本框 将40填充为值。不可能将值编辑为 小于40,因为下拉列表中的所选项目为pahse 2.
您仍然可以使用上面的代码,您只需稍微更改一下:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
int percent;
int selectedPercentage = int.Parse(ddlchoise.SelectedItem.Text);
var allowed = ddlchoise.Items.Cast<ListItem>()
.Select(li => li.Text)
.Where(t => int.TryParse(t, out percent) && percent >= selectedPercentage);
args.IsValid = allowed.Contains(txtpercents.Text.Trim());
}