【问题标题】:Switching Model from Radio to Checkboxfor将模型从 Radio 切换到 Checkboxfor
【发布时间】:2014-09-22 23:16:48
【问题描述】:

我正在运行一个 MVC5 站点并尝试将其从使用单选按钮切换到复选框。我已经阅读了该站点上的许多其他示例,但似乎无法使其正常工作。我当前的 ViewModel 将作为 NULL 发布到控制器。这是它目前的样子:

public class ViewModel {
    public string SelectedLeader { get;set;}
    public IEnumerable<Personnel> Team { get;set; }
}

public class Personnel : TableEntity {
    ... other attributes here
    public bool IsLead {get;set;}
}

SelectedLeader 用于跟踪 RadioButton 的 Selected 元素的 RowKey,因此我想我可以将其切换为 IEnumerable,但与其他示例相比仍然看起来不正确。我的 HTML 如下所示:

@using (Html.BeginForm())
{
other stuff on page
    @foreach (var person in Model.Team) {
        ... print other stuff
        @Html.CheckboxFor( e => person.IsLead , new { value=@person.RowKey })
        @Html.HiddenFor(e => person.RowKey)
    }
 }

public ActionResult Edit(ViewModel viewModel) {
    ... 
}

当它回发到服务器时,Team 实际上返回为 null(与 SelectedLeader 相同,但不使用该 ATM)。我认为我设置 CheckboxFor 的方式可能有问题,但它确实正确设置了其初始设置。

有什么想法吗?谢谢。

史蒂夫

【问题讨论】:

  • 这是一个众所周知的问题。基本上你需要在标记中使用for 而不是foreach,这样你的助手看起来像这样:@Html.HiddenFor(m =&gt; m[i].RowKey)。请注意,这里 lambda 的右侧取决于 lambda 的左侧。剃须刀应该是这样,其他方式通常表明标记有问题
  • 啊,很高兴知道 - 真的很感激这个建议。明天早上会尝试改变!嗯,不知道怎么给你声望。

标签: c# asp.net checkboxfor


【解决方案1】:

安德烈是对的。它似乎不适用于 IEnumerable(即使使用 ElementAt(i))——我不得不将我的 ViewModel 更改为 IList,现在它工作得非常好。非常感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    相关资源
    最近更新 更多