1

調査を作成しています。60 個のテキスト ボックスがあり、送信ボタンを押したときにこれらのテキスト ボックスのうち少なくとも 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
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 個の配列にテキストが含まれていることを確認するだけです。

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 に答える