我正在创建一个调查,它有60个文本框,我需要在按下提交按钮时填写至少40个这些文本框,只要40个文本框中有文本就没关系。任何想法如何用C#或其他方式来实现这一目标?
我的一些文本框:
<div class="row">
<div class="span3">
<div class="control-group">
<asp:Label ID="SupperLbl" class="control-label required" runat="server" Text="Best Supper Club"></asp:Label>
<div class="controls">
<asp:TextBox ID="SupperTxtBox" class="span3" runat="server"></asp:TextBox>
</div>
</div>
</div>
<div class="span3">
<div class="control-group">
<asp:Label ID="YogurtLbl" class="control-label required" runat="server" Text="Best Place for Frozen Yogurt"></asp:Label>
<div class="controls">
<asp:TextBox ID="YogurtTxtBox" class="span3" runat="server"></asp:TextBox>
</div>
</div>
</div>
</div>
<div class="row">
<div class="span3">
<div class="control-group">
<asp:Label ID="Label1" class="control-label required" runat="server" Text="Best Place for Dessert"></asp:Label>
<div class="controls">
<asp:TextBox ID="DessertTxtBox" class="span3" runat="server"></asp:TextBox>
</div>
</div>
</div>
<div class="span3">
<div class="control-group">
<asp:Label ID="Label2" class="control-label required" runat="server" Text="Best Place for Chicken"></asp:Label>
<div class="controls">
<asp:TextBox ID="ChickenTxtBox" class="span3" runat="server"></asp:TextBox>
</div>
</div>
</div>
</div>
.....
答案 0 :(得分:1)
将文本框放在一个数组中,然后进行一些验证。
//Place textboxes in array for easy access
TextBox[] validatedTexboxes = new TextBox[] {
textbox1, textbox2, textbox3, ...
};
//On submit, make sure 40 are filled in.
var filledTextboxes = validatedTexboxes.Count(x => !String.IsNullOrWhiteSpace(x.Text));
if (filledTextboxes > 40)
//Do Something
答案 1 :(得分:1)
string[] txtArr = { "SupperTxtBox", "YogurtTxtBox", "DessertTxtBox" };
protected void Page_Load(object sender, EventArgs e)
{
string[] lblArr = { "Best Supper Club", "Best Place for Frozen Yogurt", "Best Place for Dessert" };
for (int i = 0; i < lblArr.Length; i++)
{
Label lbl = new Label();
lbl.Text = "<br>" + lblArr[i] + "<br>";
TextBox txt = new TextBox();
txt.ID = txtArr[i];
Form.Controls.Add(lbl);
Form.Controls.Add(txt);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int Count = 0;
foreach (string item in txtArr)
{
TextBox t = (TextBox)Form.FindControl(item);
if (t != null)
{
if (t.Text.Trim() != "")
Count++;
}
}
if (Count < 3)
{
Response.Write("<br>You fill " + Count + " textbox, Please fill 3 textbox!");
}
}
答案 2 :(得分:0)
如果要在服务器端进行验证,可以递归循环遍历页面的所有控件,获取文本框并验证是否至少包含40个文本。
对于递归循环,您可以使用this answer中的扩展方法:
public static IEnumerable<T> FindControls<T>(this Control control, bool recurse) where T : Control
{
List<T> found = new List<T>();
Action<Control> search = null;
search = ctrl =>
{
foreach (Control child in ctrl.Controls)
{
if (typeof(T).IsAssignableFrom(child.GetType()))
{
found.Add((T)child);
}
if (recurse)
{
search(child);
}
}
};
search(control);
return found;
}
现在您需要做的就是获取数组并验证其中至少有40个包含文本:
private bool AreAtLeast40TextBoxesFilled()
{
var allTextBoxes = this.Page.FindControls<TextBox>(true);
return allTextBoxes.Count(t => !string.IsNullOrWhiteSpace(t.Text)) >= 40;
}
答案 3 :(得分:0)
使用Phil Haack关于MVC列表模型绑定的教程,以便您可以跟踪列表中文本框的值和ID,然后检查服务器端的计数。
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
如果列表中元素的总数小于限制,则返回模型状态验证错误并返回相同的视图。
如果您需要特定示例,请与我们联系。