【问题标题】:Razor page: complex modeling binding not updating modelRazor 页面:复杂的建模绑定不更新模型
【发布时间】:2021-10-13 21:17:33
【问题描述】:

所以我正在尝试创建一个小工具,用户可以在其中选择一组日期。但是,我需要一个相当复杂的模型来存储额外的数据。

public class DayRange{
    ...
    List<DaySelected> Days
    ...
}
   
public class DaySelected{
    public bool Selected{ get; set;}
    public string DayName {get; set;}
    public DaySelected(string Day){
        Selected = false;
        DayName = day;
    }
}

我的 Razorpage 如下所示:

@Model DayRange
...
<form asp-action="RegisterSelection" asp-controller="DayRegister">
<table>
@foreach (var Day in Model.Days)
{
    <tr>
        <td>
            <input asp-for=@Day.Selected />
        </td>                                                            
    </tr>
}
</table>
<button type="submit">Confirm</button>

</form>

我的方法 Registerselection 如下所示:

[HttpPost]
public IActionResult RegisterSelection(DayRange dr){
    ...
}

但是,每当我更改任何文本框时,所有选定的布尔值都保持不变。有人可以帮我吗?提前致谢!

【问题讨论】:

    标签: asp.net-core binding razor-pages asp.net-core-3.1 model-binding


    【解决方案1】:

    这是一个正确地将数据传递给动作的演示:

    型号:

    public class DayRange
        {
            public List<DaySelected> Days { get; set; }
        }
    
        public class DaySelected
        {
            public bool Selected { get; set; }
            public string DayName { get; set; }
            public DaySelected()
            {
               
            }
            public DaySelected(string Day)
            {
                Selected = false;
                DayName = Day;
            }
        }
    

    查看:

    @Model DayRange
    <form asp-action="RegisterSelection" asp-controller="DayRegister">
        <table>
            @{ var i = 0;}
            @foreach (var Day in Model.Days)
            {
                <tr>
                    <td>
                        <input asp-for=@Day.Selected name="Days[@i].Selected" />
                        @Day.DayName
                        <input asp-for=@Day.DayName name="Days[@i].DayName" hidden />
                    </td>
                </tr>
                i ++;
            }
        </table>
        <button type="submit">Confirm</button>
    
    </form>
    

    结果:

    【讨论】:

    • 感谢演示!我现在能够让它工作,所以我接受了你的回答作为这个问题的解决方案。我只是想知道,仅仅是因为我没有填写复选框组件的名称而导致它不起作用的原因吗?对于这个简单的问题,我深表歉意,这对我来说大多是新的。
    • 是的,.net core 用name属性绑定数据。
    猜你喜欢
    • 2020-11-16
    • 2021-03-07
    • 1970-01-01
    • 2020-08-11
    • 2018-07-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多