微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态数量的 DateTime 控件转发到控制器

如何解决动态数量的 DateTime 控件转发到控制器

我创建了一个有自己类的模型:

public class VMRequest()
{
    public int Id { get; set; }

    public List<Slot> Slots { get; set; }

    public class Slot()
    {
        public DateTime Date { get; set; }
    }
}

然后假设我向列表中添加了五个 Slot,如果我这样做,它们会完美地显示在视图中:

<form asp-action="Request">
<div class="row flex-column">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        @foreach (var slot in Model.Slots)
        {
            <div class="col-md-6">
                <div class="form-group">
                    <label asp-for="@slot.Date" class="control-label"></label>
                    <input asp-for="@slot.Date" type="date" class="form-control" />
                    <span asp-validation-for="@slot.Date" class="text-danger"></span>
                </div>
            </div>              
        }
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </div>
</form>

但是在提交时,即使将 VMRequest 模型传递给控制器​​,视图控件上的更改也不会传递 - 我不知道如何将标识符固定到每个控件??

我确定这是可能的!?

解决方法

将您的代码更改为:

    @for(int x = 0; x < Model.Slots.Length;x++)
    {
        <div class="col-md-6">
            <div class="form-group">
                <label asp-for="@Model.Slots[x].Date" class="control-label"></label>
                <input asp-for="@Model.Slots[x].Date" type="date" class="form-control" />
                <span asp-validation-for="@Model.Slots[x].Date" class="text-danger"></span>
            </div>
        </div>              
    }

那么回寄的表格就是正确的。

,

每个元素都需要用索引命名以绑定回模型。 https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ 有一个很好的例子。

简而言之: 在 for 循环中使用 razor 组件应该可以为您处理这个问题:

{{1}}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。