1

私は列挙型を持っています

public enum TypeDesc
{
[Description("Please Specify")]
PleaseSpecify,
Auckland,
Wellington,
[Description("Palmerston North")]
PalmerstonNorth,
Christchurch
}

page_Loadの次のコードを使用して、この列挙型をドロップダウンリストにバインドしています

protected void Page_Load(object sender, EventArgs e)
        {
            if (TypeDropDownList.Items.Count == 0)
            {
                foreach (TypeDesc newPatient in EnumToDropDown.EnumToList<TypeDesc>())
                {
                 TypeDropDownList.Items.Add(EnumToDropDown.GetEnumDescription(newPatient));
                }
            }
        }

public static string GetEnumDescription(Enum value)
        {
            FieldInfo fi = value.GetType().GetField(value.ToString());

            DescriptionAttribute[] attributes =
                (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

            if (attributes != null && attributes.Length > 0)
                return attributes[0].Description;
            else
                return value.ToString();
        }

        public static IEnumerable<T> EnumToList<T>()
        {
            Type enumType = typeof(T);

            // Can't use generic type constraints on value types,
            // so have to do check like this
            if (enumType.BaseType != typeof(Enum))
                throw new ArgumentException("T must be of type System.Enum");

            Array enumValArray = Enum.GetValues(enumType);
            List<T> enumValList = new List<T>(enumValArray.Length);

            foreach (int val in enumValArray)
            {
                enumValList.Add((T)Enum.Parse(enumType, val.ToString()));
            }

            return enumValList;
        }

そして私のaspxページは次のコードを使用して検証します

            <asp:DropDownList ID="TypeDropDownList" runat="server" >
            </asp:DropDownList>
            <asp:RequiredFieldValidator ID="TypeRequiredValidator" runat="server" ControlToValidate="TypeDropDownList" ErrorMessage="Please Select a City" Text="<img src='Styles/images/Exclamation.gif' />"
                ValidationGroup="city"></asp:RequiredFieldValidator>

しかし、私の検証では、都市名として「指定してください」を受け入れています。都市が選択されていない場合、ユーザーの送信を停止したい。

4

3 に答える 3

2

列挙型アイテムを追加する前に、指定してください。

 TypeDropDownList.Items.Add("Please Specify","");
 foreach (TypeDesc newPatient in EnumToDropDown.EnumToList<TypeDesc>())
 {
    TypeDropDownList.Items.Add(EnumToDropDown.GetEnumDescription(newPatient), newPatient.ToString());
 }

列挙型から「指定してください」を削除します

于 2012-06-29T02:56:50.173 に答える
0

DropDownListは、明示的に指定されている場合、 ValueおよびTextプロパティにバインドできます。アイテムの値がnullの場合、これはバリデーターによって取得されます。

<asp:DropDownList ID="TypeDropDownList" runat="server" DataTextField="Text" DataValueField="Value" ></asp:DropDownList>

アイテムを追加するとき:

foreach (TypeDesc newPatient in EnumToDropDown.EnumToList<TypeDesc>())
{
   string text = EnumToDropDown.GetEnumDescription(newPatient)),
   TypeDropDownList.Items.Add(new
   {
       Text = text,
       Value = text == "Please specify" ? null : text // should be replaced with a clean solution
   }
}
于 2012-06-29T02:57:51.877 に答える
0

私はそれを整理しました私は次のコードを使用しました

if (TypeDropDownList.Items.Count == 0)
            {
                foreach (TypeDesc newPatient in EnumToDropDown.EnumToList<TypeDesc>())
                {
                    string text = EnumToDropDown.GetEnumDescription(newPatient);

                    TypeDropDownList.Items.Add(new ListItem(text, newPatient.ToString()));
                }
            }

とバリデーターとして

<asp:RequiredFieldValidator ID="TypeRequiredValidator" runat="server" ControlToValidate="TypeDropDownList"
                InitialValue="PleaseSpecify" ErrorMessage="Please Select a City" Text="<img src='Styles/images/Exclamation.gif' />"
                ValidationGroup="city"></asp:RequiredFieldValidator>
于 2012-06-29T03:58:16.590 に答える