1

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

4 回答 4

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
于 2013-08-15T13:51:54.053 回答
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!");
    }
}
于 2013-08-15T14:42:11.767 回答
0

如果您想在服务器端进行验证,您可以在页面的所有控件上递归循环,获取文本框并验证是否至少 40 包含文本。

对于递归循环,您可以使用此答案中的扩展方法:

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 个包含 text :

private bool AreAtLeast40TextBoxesFilled()
{
    var allTextBoxes = this.Page.FindControls<TextBox>(true);
    return allTextBoxes.Count(t => !string.IsNullOrWhiteSpace(t.Text)) >= 40;
}
于 2013-08-15T13:57:52.770 回答
0

使用 Phil Haack 的 MVC 列表模型绑定教程,这样您就可以跟踪列表中文本框的值和 id,然后检查服务器端的计数。

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

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

如果您需要具体示例,请告诉我。

于 2013-08-15T14:09:06.997 回答