.Net Core单选按钮始终返回false

时间:2019-09-10 14:43:47

标签: javascript jquery asp.net .net asp.net-mvc

我正在向视图发送一个列表。 尝试通过表单提交列表中的每个项目。

型号:

 public partial class Model
    {
        public int Id { get; set; }
        public string UId { get; set; }
        public int WId { get; set; }
        public bool IsEnabled { get; set; }

        public virtual AspNetUsers User { get; set; }
        public virtual WModel W { get; set; }
    }

控制器:

public IActionResult UWC()
{
    List<Model> uW = db.UW.Include(x => x.U).Include(x=>x.W).ToList();
    return View(uW);
}

[HttpPost]
public IActionResult UWC(Model uW)
{
    var s = ModelState.ErrorCount;
    return RedirectToAction("UWC");
}

查看

@model List<Model>
            <table  class="table">
                <thead>
                    <tr>
                        <th>
                            @Html.DisplayNameFor(model => model[0].W.Name)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model[0].W.Type)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model[0].W.Description)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model[0].W.IsActive)
                        </th>
                    </tr>
                </thead>
                <tbody>
                    @for (var item = 0; item < Model.Count(); item++)
                    {
                        <tr>
                            <td>
                                @Html.DisplayFor(model => model[item].W.Name)
                            </td>
                            <td>
                                @Html.DisplayFor(model => model[item].W.Type)
                            </td>
                            <td>
                                @Html.DisplayFor(model => model[item].W.Description)
                            </td>
                            <td>
                            <form asp-action="UserWidgetConfiguration" asp-controller="UserManagement" method="post">
                                @Html.RadioButtonFor(model => model[item].IsEnabled, true, new { @Name = "IsEnabled",, id = "enabled_" + item } })<label>True</label>
                                @Html.RadioButtonFor(model => model[item].IsEnabled, false, new { @Name = "IsEnabled" ,, id = "disabled_" + item }})<label>False</label>
                                <input type="hidden" asp-for="@Model[item].Id" value="@Model[item].Id" name="Id" />
                                <input type="hidden" asp-for="@Model[item].WidgetId" value="@Model[item].WidgetId" name="WidgetId" />
                                <input type="hidden" asp-for="@Model[item].UserId" value="@Model[item].UserId" name="UserId" />
                            </form>
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
        </div>
    </div>
</div>
@section Scripts{
    <script>
        $(function () {
            $('input[type=radio]').change(function () {
                $(this).closest('form').submit();
            });
        });
    </script>
}

上面是完整的代码。

单选按钮始终绑定为false。

但是, 我正在使用脚本提交单选按钮值更改后的表单:

  <script>
        $(function () {
            $('input[type=radio]').change(function () {
                var data = JSON.stringify($(this).closest('form').serializeArray());
                console.log(data);
                $(this).closest('form').submit();
            });
        });
    </script>

控制台会为单选按钮提供适当的值。

[{"name":"[0].IsEnabled","value":"True"},{"name":"Id","value":"1"},{"name":"WId","value":"1"},{"name":"UId","value":"a"},{"name":"__RequestVerificationToken","value":"CfDJ8FLfqW1-k2hNlQsGtRBQVqOKRWmlkQYWTMrEQNcJHWGd7_LPvHfjw3V5gxYAnLjwz7HvjExZDXgmbSMQ1DnEONg7EJfu5OqYm7xntqXIe4IMkD1HD4SHRtihdyzDXHrKu7jNXUwuN1B6H-565O0J0oZsGVCopZqy180oPco29vqyvpcZkZnWEOmVQX6_V3T6AQ"}]

当我期望控制器中IsEnabled的值为真时,我得到的是错误值。

但是当表单被序列化并显示在控制台中时,该值符合预期。

这是因为事件处理程序吗?

1 个答案:

答案 0 :(得分:1)

单选输入名称([0].IsEnabled)中的数组前缀使输入不映射到模型中,因为名称应为IsEnabled。 作为一种简单的解决方法,您可以仅手动创建输入而无需HTML帮助器,例如:

<input type="radio" name="IsEnabled" value="True"/> <label>True</label>
<input type="radio" name="IsEnabled" value="False"/> <label>False</label>

有关其他详细信息,请参见助手的source

相关问题