需要填写一些文本框但不是全部

时间:2013-08-15 13:47:07

标签: c# asp.net validation

我正在创建一个调查,它有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>
    .....

4 个答案:

答案 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

如果列表中元素的总数小于限制,则返回模型状态验证错误并返回相同的视图。

如果您需要特定示例,请与我们联系。