6

カスタムアダプタのradiobuttonlistが機能していますが、ユーザーフォームのデータがリセットされ、以前にデータが送信されていない場合、ラジオボタンの1つ(最初の)が常に事前に選択されています。これを回避したいのですが、どうすればこれを実現できますか?

@Html.RadioButtonForSelectList(model => model.ViewModelForThingCreate.ThingTypeID, Model.ViewModelForCarCreate.CarTypeSelectList)

と:

public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(this HtmlHelper<TModel> HTMLHelper,Expression<Func<TModel, TProperty>> Expression, IEnumerable<SelectListItem> ListOfValues)
        {
            var MetaData = ModelMetadata.FromLambdaExpression(Expression, HTMLHelper.ViewData);
            var SB = new StringBuilder();

            if (ListOfValues != null)
            {
                foreach (SelectListItem Item in ListOfValues)
                {
                    var ID = string.Format("{0}_{1}", MetaData.PropertyName, Item.Value);
                    var Radio = HTMLHelper.RadioButtonFor(Expression, Item.Value, new { id = ID }).ToHtmlString();
                    SB.AppendFormat("<label class=\"radio inline\" for=\"{0}\">{1} {2}</label>", ID, Radio, HttpUtility.HtmlEncode(Item.Text));
                }
            }
            return MvcHtmlString.Create(SB.ToString());
        }

ありがとう!

4

3 に答える 3

2

これは、ボタンがチェックされていないように設定されたカスタムヘルパーです。これを試してください。すべてのラジオボタンがオフになっていると思います。

public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(this HtmlHelper<TModel> HTMLHelper,Expression<Func<TModel, TProperty>> Expression, IEnumerable<SelectListItem> ListOfValues)
        {
            var MetaData = ModelMetadata.FromLambdaExpression(Expression, HTMLHelper.ViewData);
            var SB = new StringBuilder();

            if (ListOfValues != null)
            {
                foreach (SelectListItem Item in ListOfValues)
                {
                    var ID = string.Format("{0}_{1}", MetaData.PropertyName, Item.Value);
                    var Radio = HTMLHelper.RadioButtonFor(Expression, Item.Value, new { id = ID }).ToHtmlString();
                    SB.AppendFormat("<label class=\"radio inline\" checked="false" for=\"{0}\">{1} {2}</label>", ID, Radio, HttpUtility.HtmlEncode(Item.Text));
                }
            }
            return MvcHtmlString.Create(SB.ToString());
        }
于 2013-02-16T03:36:42.180 に答える
1

残念ながら、1つのラジオボタンを常にチェックする必要があります。それはラジオボタンについての不幸な部分です。ただし、いつでも非表示のラジオボタンをフォームに追加して、checkedプロパティをtrueに設定できます。内部コードにnullを受け入れさせるか、何も選択されていない場合は期待するものを受け入れます。

すべてのラジオボタンの値をオフまたはfalseに設定してみてください

foreach(button in ButtonGroup){
button.checked = false;
}
于 2013-02-26T20:38:49.033 に答える
1

mvc3テンプレートでメソッドを試したところ、うまく機能しているようです。基本的に私はいくつかのモデルを作成しました

 public class IndexModel
 {
     public string ID;
     public IEnumerable<SelectListItem> Elements;
 }

次に、インスタンスを作成し、値を入力しました。

var model = new IndexModel()
            {
                ID = "a",
                Elements = 
                       new List<SelectListItem>() { 
                                                    new SelectListItem() { Text = "test1", Value = "1"},
                                                    new SelectListItem() { Text = "test2", Value = "2"}}
            };

ビューで私はあなたの拡張メソッドを使用しました

<form>
@(Extensions.RadioButtonForSelectList(Html, x => x.ID, Model.Elements))
<button type="reset">Reset</button>
</form>

ローンチ後はすべて問題ないようです。フィールドはロード時に選択されず、「リセット」ボタンを押すとクリアされます。

ここに画像の説明を入力してください

あなたが何を達成しようとしているのか完全に理解しているかどうかわからないので、もう少し詳しく教えていただけますか:-)

編集:

ラジオボタンのプレーンHTMLの例を次に示します。それらは最初は間違いなく記入されていません。必要に応じて追加する必要がありますが、デフォルトでは、ラジオボタンを選択せず​​にフォームを送信できます。また、2番目の例のようにcheckedを追加することで、1つをcheckedにすることができます。クライアント側でJavaScriptを使用していますか?多分それはこの副作用を引き起こしていますか? http://jsbin.com/isadun/1

mz

于 2013-02-27T23:04:33.990 に答える