0

MVC Razor プロジェクトで、RadioButtonList を使用してラジオ ボタンを生成しています。これが私のコードの例です:

@Html.RadioButtonList(n => n.HouseType)

何らかの理由で、ラジオ ボタン リストが事前に選択された値を取得します。最初のチェックボックスは常にチェックされているため、UI がややこしくなります。

これをうまく無効にするにはどうすればよいですか?

1 つの方法は、Jquery を使用してページ全体をループし、各ボックスの選択を解除することです。しかし、それは私見の回避策ではありません。

編集: カスタム列挙型である HouseType に関する詳細情報は次のとおりです。

    public enum HouseType
{
    House,
    Apartment,
    Garage
};

そして、この行を使用して呼び出されます

public HouseType HouseType { get; set; }
4

1 に答える 1

1

HouseTypeビュー モデルでプロパティを null 許容型にすることができます。たとえば、列挙型の場合:

public HouseTypes? HouseType { get; set; }

または整数の場合:

public int? HouseType { get; set; }

アップデート:

を使用しているようですfollowing helper。このヘルパーは、null 許容列挙値をサポートしていません。だからそれを適応させる:

public static class RaidioButtonListHelper
{
    /// <summary>
    /// Create a radiobutton list from viewmodel.
    /// </summary>
    public static MvcHtmlString RadioButtonList<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression, IEnumerable<SelectListItem> listOfValues = null)
    {
        var typeOfProperty = expression.ReturnType;

        // Added by Darin Dimitrov to support nullable enums
        var underlyingType = Nullable.GetUnderlyingType(typeOfProperty);
        if (underlyingType != null)
        {
            typeOfProperty = underlyingType;
        }
        // End of addition

        if (listOfValues == null && typeOfProperty.IsEnum)
        {
            listOfValues = new SelectList(Enum.GetValues(typeOfProperty));
        }

        var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

        // Ctreat table
        TagBuilder tableTag = new TagBuilder("table");
        tableTag.AddCssClass("radio-main");

        // Create tr:s
        var trTagLable = new TagBuilder("tr id=\"" + metaData.PropertyName + "Lables\"");
        var trTagRadio = new TagBuilder("tr id=\"" + metaData.PropertyName + "Radios\"");

        foreach (SelectListItem item in listOfValues)
        {
            var text = item.Text;
            var value = item.Value ?? text;

            // Generate an id to be given to the radio button field 
            var id = string.Format("{0}_{1}", metaData.PropertyName, value);

            // Create the radiobuttons
            var radioTag = htmlHelper.RadioButtonFor(expression, value, new { id = id }).ToHtmlString();

            // Create the label for the radiobuttons.
            var labelTag = htmlHelper.Label(id, HttpUtility.HtmlEncode(text));

            // Add the lables and reaiobuttons to td:s
            var tdTagLable = new TagBuilder("td style=\"padding-left: 10px; text-align: center\"");
            var tdTagRadio = new TagBuilder("td style=\"padding-left: 10px; text-align: center\"");
            tdTagLable.InnerHtml = labelTag.ToString();
            tdTagRadio.InnerHtml = radioTag.ToString();

            // Add tds: to tr:s
            trTagLable.InnerHtml += tdTagLable.ToString();
            trTagRadio.InnerHtml += tdTagRadio.ToString();

        }

        // Add tr:s to table
        tableTag.InnerHtml = trTagLable.ToString() + trTagRadio.ToString();

        //Return the table tag
        return new MvcHtmlString(tableTag.ToString());
    }
}

これで、null 許容列挙型で動作し、対応するプロパティの値が null の場合、ラジオ ボタンは選択されません。

于 2012-10-16T07:34:57.740 に答える