4

forループとRazor構文を使用して作成しているラジオボタンをグループ化しようとしています。コードは次のとおりです。

       @for (var i = 0; i < Model.Sessions.Count(); i++)
       {
            @Html.HiddenFor(it => it.Sessions[i].Id)
            @Html.RadioButtonFor(it => it.Sessions[i].Checkbox, "0", new {@class = "Sessions", @id = id, @name="Sessions"})
            @Html.LabelFor(it => it.Sessions[i].Name, Model.Sessions[i].Name)
            <span class="time-span"><em>@Model.Sessions[i].StartTime</em><em>@Model.Sessions[i].EndTime</em></span>
            <br />
       }

forループ内の3行目は、問題がある場所です。基本的に名前は変更されず、常に「Sessions[x].Checkbox」になります。チェックボックスは、カスタムクラスのプロパティ(bool)です。Razorのデバッグのコツをつかむことができないようですので、どんな助けでも大歓迎です、これはここの誰かにとって非常に明白になると思います。

編集 ディミトロフの投稿は大いに役立ちました。以下は私が使用した最終的なコードです。@class属性と@id属性を使用して、Javascriptを使用して、最初に選択されたセッションを選択できるようにします(これは編集であり、フォームの作成ではないため)。

    @for (var i = 0; i < Model.Sessions.Count(); i++)
    {
        @Html.HiddenFor(it => it.Sessions[i].Id)
        var SId = @Model.Sessions[i].Id;
        @Html.RadioButtonFor(it => it.selectedSession, Model.Sessions[i].Id, new { id = SId, @class = "Sessions" })
        @Html.LabelFor(it => it.Sessions[i].Name, Model.Sessions[i].Name)
        <span class="time-span"><em>@Model.Sessions[i].StartTime</em><em>@Model.Sessions[i].EndTime</em></span>
        <br />
    }
4

1 に答える 1

5

単一のラジオボタンのみを選択できるようにする場合は、次のように、選択したセッションIDを保持するためにビューモデルに単一のプロパティを設定する必要があります。

public class SessionViewModel
{
    public int SelectedSessionId { get; set; }
    public IList<Session> Sessions { get; set; }
}

public class Session
{
    public int Id { get; set; }
    public string Name { get; set; }
}

次に、コントローラーがあります。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new SessionViewModel
        {
            SelectedSessionId = 2,
            Sessions = Enumerable.Range(1, 5).Select(x => new Session
            {
                Id = x,
                Name = "session" + x,
            }).ToList()
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SessionViewModel model)
    {
        return Content("Thank you for selecting session id: " + model.SelectedSessionId);
    }
}

そして最後にビュー:

@model SessionViewModel

@using (Html.BeginForm())
{
    for (var i = 0; i < Model.Sessions.Count(); i++)
    {
        @Html.HiddenFor(x => x.Sessions[i].Id)
        @Html.RadioButtonFor(x => x.SelectedSessionId, Model.Sessions[i].Id, new { id = "session_" + i })
        @Html.Label("session_" + i, Model.Sessions[i].Name)
        <br/>
    }
    <button type="submit">OK</button>
}
于 2012-06-14T18:11:39.977 に答える