【问题标题】:Checkbox values not submitted via POST未通过 POST 提交的复选框值
【发布时间】:2017-01-11 04:46:45
【问题描述】:

我的模型

public class User
{
    public string Id { get; set; }
    [Display(Name = "")]
    public bool IsSelected { get; set; }
    [Display(Name = "Nom")]
    public string Name { get; set; }
    [Display(Name = "Prénom")]
    public string Firstname { get; set; }
}

public class ListUser
{
    public string ClickedButton { get; set; }
    [Display(Name = "")]
    public List<Models.User> Users;
}

index.cshtml

在这个页面上我显示了来自ListUser的所有用户,每个用户都可以用一个复选框来选择

@model Models.ListUser
<!-- some content here -->
<script>
    function clickedButton(i){
        document.getElementById("ClickedButton").value = i;
        return true;
    }
</script>

@using (Html.BeginForm("Index", "Users", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    @Html.HiddenFor(m => m.ClickedButton);
    for (var i = 0; i < Model.Users.Count(); i++)
    {
        @Html.CheckBoxFor(m => m.Users[i].IsSelected)
        @Html.DisplayNameFor(m => m.Users[i].Name)
        @Html.DisplayFor(m => m.Users[i].Name)
        @Html.DisplayNameFor(m => m.Users[i].Firstname)
        @Html.DisplayFor(m => m.Users[i].Firstname)
    }
    <input type="submit" value="Réinitialiser les mots de passe" class="btn btn-default" onclick="clickedButton('psw')"/>
}

这是控制器(当我提交表单时会调用此控制器)

[HttpPost]
public ActionResult Index(ListUser model)
{
    // I added a breakpoint here            
    return this.RedirectToAction("Index", "Home");
}

我想将所有选定的用户发送到控制器,例如当我选择 4 个用户时,我想在控制器中检索它们:

问题:当我提交表单时,模型中只设置了ClickedButton 字段,我选择的用户(通过复选框)没有设置。

有什么问题?

【问题讨论】:

  • 这是什么:onclick="clickedButton('psw')?
  • @BviLLe_Kid 我忘了说,它设置了隐藏元素@Html.HiddenFor(m =&gt; m.ClickedButton); 的值。我会更新代码。

标签: asp.net-mvc razor checkbox


【解决方案1】:

UsersListUser 类中的字段,而不是属性,DefaultModelBinder 不绑定字段。改成

public class ListUser
{
    public string ClickedButton { get; set; }
    [Display(Name = "")]
    public List<Models.User> Users { get; set; } // change
}

还要注意,唯一绑定的属性是UserIsSelected 属性,您需要在Id 属性的视图中包含隐藏输入,以便匹配正确的选择

@Html.HiddenFor(m => m.Users[i].Id)

【讨论】:

  • 非常感谢,现在可以使用了。祝你有美好的一天!
【解决方案2】:

小改动可以帮助并确保所有输入都具有 html 形式的正确名称

public ActionResult Index(string ClickedButton, User model)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2015-05-29
    • 2018-09-04
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多