2021年1月15日 星期五

[研究][ASP.NET] 檢查相同 GroupName 的 RadioButton 是否選了 (必選檢查)

[研究][ASP.NET] 檢查相同 GroupName 的 RadioButton 是否選了 (必選檢查)

2021-01-15

Visual Studio 2019 + ASP.NET + WebForm + C#

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication14.Default" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:RadioButton ID="RadioButton1" GroupName="RadioButtonGroup1" runat="server" Text="AAA" /><br />
            <asp:RadioButton ID="RadioButton2" GroupName="RadioButtonGroup1" runat="server" Text="BBB" /><br />
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
            <asp:Label ID="Label1" runat="server"></asp:Label>
        </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication14
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string errMsg = "RadioButtonGroup1 群的 RadionButton 必選";
            Label1.Text = "";

            // 方法1
            // 判斷 GroupName 相同為 RadioButtonGroup1 的全部 RadioButton 是否選了一個,或沒選
            bool radioButtonRequired = CheckRadioButtonRequired(form1.Controls, "RadioButtonGroup1");
            if (radioButtonRequired == false)
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + errMsg + "');</script>");
            }

            // 方法2
            // 判斷 GroupName 相同為 RadioButtonGroup1 選了甚麼內容
            string radioButtonSelectedValue = GetRadioValue(form1.Controls, "RadioButtonGroup1");
            Label1.Text = radioButtonSelectedValue;
            if (radioButtonSelectedValue=="")
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + errMsg + "');</script>");
            }
        }
        public bool CheckRadioButtonRequired(ControlCollection controls, string groupName)
        {
            // 找出被選的 RadioButton
            var selectedRadioButton = controls.OfType<RadioButton>().FirstOrDefault(rb => rb.GroupName == groupName && rb.Checked);
            // 如果沒找到 (null),回傳 false,否則回傳 true
            return selectedRadioButton == null ? false : true;
        }
        public string GetRadioValue(ControlCollection controls, string groupName)
        {
            var selectedRadioButton = controls.OfType<RadioButton>().FirstOrDefault(rb => rb.GroupName == groupName && rb.Checked);
            return selectedRadioButton == null ? string.Empty : selectedRadioButton.Text; //trinary operator (shortcut of an if expresison)
        }
    }
}


注意:其時本來是想拿來檢查 FormView 中大量不同 GroupName 群的 RadioButton 是否都選了一個  (必選檢查),但 FormView1 的 EditItemTemplate 中的 控制項 (Control) 不是直接在 FormView1.Controls 中,而是在 FormView1 的 Control 中的 Control 中的 Control 中的 Control,好幾層,直接用 FormView1.Controls 抓不到。


bool radioButtonRequired = CheckRadioButtonRequired(FormView1.Controls, "RadioButtonGroup1");

可能要想辦法搭配下面這篇的 CheckAllTextBoxeLength(Control parent) 進行。

[研究][ASP.NET]檢查FormView1中上百個TextBox輸入資料長度http://shaurong.blogspot.com/2021/01/aspnetformview1textbox.html

(完)

沒有留言:

張貼留言