RadioButtonFor不与局部视图绑定

本文关键字:视图 绑定 局部 RadioButtonFor | 更新日期: 2023-09-27 18:26:20

我的RadioButtonFor绑定到后控制器操作时出现问题。请参见下文。

主视图-调用一个操作加载部分视图并用窗体包围它

@using (Html.BeginForm("FilterPlaceInPriorPosition", "Placements", FormMethod.Post))
{
    @Html.Action("AdvancedSearch", "Home", new { Area = "Common", advancedSearchModel = Model.AdvancedSearch })
}

高级搜索部分控制器操作

public ActionResult AdvancedSearch(AdvancedSearch advancedSearchModel)
    {
       return PartialView("_AdvancedSearch", advancedSearchModel);
    }

部分视图-高级搜索.cshtml

@model AdvancedSearch
<div class="row">
        <div class="col-sm-4">
            @Html.TextBoxFor(model => model.Search, new { @class = "form-control no-max-width" })
        </div>
        <div class="col-sm-8">
                @Html.RadioButtonFor(model => model.MyActiveStudents, true, new {Name = "studentTypeRadio"}) <label for="MyActiveStudents">My active students</label>
                @Html.RadioButtonFor(model => model.AllActiveStudents, true, new {Name = "studentTypeRadio"}) <label for="AllActiveStudents">All active students</label>
        </div>
    </div>

过帐控制器操作-FilterPlaceInPriorPosition

[HttpPost]
        public ActionResult FilterPlaceInPriorPosition(AdvancedSearch filter)
        {
            return RedirectToAction("PlaceInPriorPosition", filter);
        }

高级搜索.cs类

public class AdvancedSearch
{
    public bool MyActiveStudents { get; set; }
    public bool AllActiveStudents { get; set; }

如果您查看图像,您可以看到文本框文本绑定,但两个单选按钮没有绑定。调试结果图像

RadioButtonFor不与局部视图绑定

您正在显式更改无线电输入的名称属性。然后,该值将发布回studentTypeRadio而不是MyActiveStudentsAllActiveStudents。由于模型中没有与之匹配的内容,因此该值将被丢弃。

相反,你应该有这样的东西:

public class AdvancedSearch
{
    public bool OnlyMyActiveStudents { get; set; } // default will be `false`
}

然后在你的部分:

@Html.RadioButtonFor(m => m.OnlyMyActiveStudents, true, new { id = "MyActiveStudents" })
<label for="MyActiveStudents">My active students</label>
@Html.RadioButtonFor(m => m.OnlyMyActiveStudents, false, new { id = "AllActiveStudents" })
<label for="AllActiveStudents">All active students</label>

此外,FWIW,在这里使用儿童动作是毫无意义的。如果您只想将一个实例传递给局部视图,那么只需使用Html.Partial就可以实现这一点,而不需要子操作的所有不必要开销:

@Html.Partial("_AdvancedSearch", Model.AdvancedSearch)