Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在post.netCore Razor页面上挣扎于数据绑定模型_C#_Entity Framework_Data Binding_.net Core_Razor Pages - Fatal编程技术网

C# 在post.netCore Razor页面上挣扎于数据绑定模型

C# 在post.netCore Razor页面上挣扎于数据绑定模型,c#,entity-framework,data-binding,.net-core,razor-pages,C#,Entity Framework,Data Binding,.net Core,Razor Pages,我目前正在努力获取要绑定到post事件的数据 我使用efcore将数据加载到对象,该对象用于加载和显示数据列表 <div class="container"> <form method="post"> @if (Model.HeadersHasData) { // unnessary codes @foreach (var item in Model.DisplayDataHe

我目前正在努力获取要绑定到post事件的数据

我使用efcore将数据加载到对象,该对象用于加载和显示数据列表

  <div class="container">
    <form method="post">
        @if (Model.HeadersHasData)
        {
           // unnessary codes 


            @foreach (var item in Model.DisplayDataHeaders)
            {
                <div class="container mb-2">
                    <div class="row border-dark border-top">
                        <div class="col-sm-1">@Html.DisplayFor(c => item.ServiceAbbr)</div>
                        <div class="col-sm-4">@Html.DisplayFor(c => item.ServiceName)</div>
                        <div class="col-sm-3">@Html.DisplayFor(c => item.Qty) Hours/IPs/Locations</div>
                        <div class="col-sm-2">@Html.DisplayFor(c => item.Description) Duration</div>
                    </div>
                    @if (Model.DetailsHasData)
                    {
                        @foreach (var details in Model.DisplayDataDetails)
                        {
                            @if (details.ServiceId == item.ServicesId)
                            {
                                <div class="row">
                                    <input type="hidden"
                                           name="DisplayDataDetails.Index"
                                           value="@details.TaskAssignedId" />
                                    <input type="hidden"
                                           name="DisplayDataDetails[@details.TaskAssignedId].TaskAssignedId"
                                           value="@details.TaskAssignedId" />
                                    <div class="col-sm-1">
                                        <input type="checkbox"
                                               name="DisplayDataDetails[@details.TaskAssignedId].TaskComplete"
                                               value="@details.TaskComplete"
                                               checked=@details.TaskComplete
                                               disabled="@details.AccessGranted" />
                                    </div>
                                    <div class="col-sm-2">@details.TaskName</div>
                                    <div class="col-sm-1">@details.TaskStartDate.ToShortDateString()</div>
                                    <div class="col-sm-1">@details.TaskEndDate.ToShortDateString()</div>
                                    <div class="col-sm-2">@details.TechLead</div>
                                    <div class="col-sm-2">@details.Tech2</div>
                                    <div class="col-sm">@details.Tech3</div>
                                </div>
                            }
                        }
                    }
                </div>
            }

        }
        <button type="submit">Test</button>
    </form>
</div>

@if(型号HeadersHasData)
{
//不必要的代码
@foreach(Model.DisplayDataHeaders中的var项)
{
@DisplayFor(c=>item.servicebr)
@DisplayFor(c=>item.ServiceName)
@Html.DisplayFor(c=>item.Qty)小时/IPs/位置
@DisplayFor(c=>item.Description)持续时间
@if(型号详情数据)
{
@foreach(Model.DisplayDataDetails中的var详细信息)
{
@if(details.ServiceId==item.ServicesId)
{
@details.TaskName
@details.TaskStartDate.ToShortDateString()的详细信息
@details.TaskEndDate.ToShortDateString()的详细信息
@details.TechLead
@详情2
@详情3
}
}
}
}
}
试验
这将正确显示数据和所有内容

我现在正在为用户更改当前使用的复选框(最终将尝试显示复选框的更改事件)进行交互

我已经应用了[bindProperty],但每次通过DisplayDataDetails对象进行调试时,我都会得到一个计数为13的对象,这是预期的正确行数,但所有行都为空

我很困惑我错过了什么,因为我读过的所有东西 及

这表明这应该是一个非常直接的动作

     [BindProperty]
        public List<Detail> DisplayDataDetails { get; set; }

  public async Task OnPostAsync(int? saleId)
        {
            var test = DisplayDataDetails;
            //await LoadDataAsync(saleId);

            var pause= "pause";

        }
[BindProperty]
公共列表DisplayDataDetails{get;set;}
公共异步任务OnPostAsync(int?saleId)
{
var测试=显示数据详细信息;
//等待LoadDataAsync(saleId);
var pause=“暂停”;
}
任何助手或建议将不胜感激

更新1 我只是想添加和更新,创建了一个单独的测试项目,并且能够在中遍历绑定复杂集合的示例。我修改了视图以匹配我的用例,并且能够获取数据,即使使用数据绑定返回时带有复选框值

这很有效 .cs

namespace RazorPages
{
公共类ModeContactTestModel:PageModel
{
[BindProperty]
公共列表联系人{get;set;}=new List();
公共字符串stubFirstName{get;private set;}
公共字符串stubLastName{get;private set;}
公共互联网
{
LoadTestData();
}
私有void LoadTestData()
{
//联系人=
stubFirstName=“约翰”;
stubLastName=“Doe”;
对于(变量i=0;i<5;i++)
{
联系人。添加(新联系人)
{
ContactId=i,
FirstName=stubFirstName,
LastName=stubLastName,
Email=stubLastName+“+stubLastName+i+”Test@email.com",
启用=(i%2==0)?真:假
});
}
}
邮政署公告
{
//处理联系人
}
}
公共类联系人
{
public int ContactId{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串电子邮件{get;set;}
已启用公共bool的{get;set;}
}
}
.cshtml

@page
@model RazorPages.ModeContactTestModel
@{
    ViewData["Title"] = "ModelContactTest";
}

<h1>ModelContactTest</h1>
<form method="post">
    <table class="table">

        <tr>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Email</th>
            <th>Enabled</th>
        </tr>
        @foreach (var contact in Model.Contacts)
        {
            <tr>
                <td>
                    <input type="hidden" name="Contacts.Index" value="@contact.ContactId" />
                    <input type="hidden" name="Contacts[@contact.ContactId].ContactId" value="@contact.ContactId" />
                    @*@contact.ContactId*@
                </td>
                <td><input name="Contacts[@contact.ContactId].FirstName" value="@contact.FirstName" /></td>
                <td><input name="Contacts[@contact.ContactId].LastName" value="@contact.LastName" /></td>
                <td><input name="Contacts[@contact.ContactId].Email" value="@contact.Email" /></td>
                <td>
                    <input type="checkbox" 
                           name="Contacts[@contact.ContactId].Enabled" 
                           value="true" 
                           checked="@contact.Enabled"/></td>
            </tr>
        }
    </table>
    <button>Update</button>
</form>
@page
@model ##########################
@{
    ViewData["Title"] = "#####################";
}

<h1>EngagementingDetails</h1>
<form method="post">
    <table class="table">
        @foreach (var Detail in Model.Details)
        {
            <tr class="row">
                <td>
                    <input type="hidden" name="Details.Index" value="@Detail.AssignedId" />
                    <input type="hidden" name="Details[@Detail.AssignedId].AssignedId" value="@Detail.AssignedId" />
                </td>

                <td class="col">
                    <input type="checkbox" name="Details[@Detail.AssignedId].Complete" value="true" checked="@Detail.Complete" disabled="@Detail.AccessGranted" />
                </td>
                <td class="col">
                    <input type="hidden" name="Details[@Detail.AssignedId].Name" value="@Detail.Name" />
                    @Detail.Name
                </td>
                <td class="col">
                    <input type="hidden"
                           name="Details[@Detail.AssignedId].StartDate"
                           value="@Detail.StartDate" />
                    @Detail.StartDate.ToShortDateString()
                </td>
                <td class="col">
                    <input type="hidden"
                           name="Details[@Detail.AssignedId].EndDate"
                           value="@Detail.EndDate" />
                    @Detail.EndDate.ToShortDateString()
                </td>
                <td class="col">
                    <input type="hidden"
                           name="Details[@Detail.AssignedId].TechLead"
                           value="@Detail.TechLead" />
                    @Detail.TechLead
                </td>

            </tr>
        }
    </table>
    <button>Update</button>
</form>


@page
@model RazorPages.ModeContactTestModel
@{
ViewData[“Title”]=“ModelContactTest”;
}
模型接触试验
名字
姓
电子邮件
启用
@foreach(Model.Contacts中的var触点)
{
@*@contact.ContactId*@
}
更新
我创建了一个新的演示razorPage,开始重写我的页面。我从苹果开始,应用于我的工作项目。。。。数据绑定似乎仍然不起作用

这是没有任何,因为我看到没有什么不同,跳出我

.cs

namespace Project.Web.Razor
{
公共课:页面模型
{
[BindProperty]
公共列表详细信息{get;set;}/=new List()//
公共互联网
{
LoadData();
}
私有void LoadData()
{
详细信息=新列表();
对于(变量i=0;i<5;i++)
{
详细信息。添加(新的详细信息)
{
AssignedId=i,
Name=“开发测试任务”+i,
完成=(i%2==0)?真:假,
StartDate=转换为ToDateTime(“2019年1月1日”),
EndDate=转换为ToDateTime(“2019年1月1日”),
Lead=“John Doe”,
//SaleId=i+1,
//ServiceId=i+2,
AccessGrassed=(i%2==0)?true:false,
});
namespace Project.Web.Razor
{
    public class ################: PageModel
    {
        [BindProperty]
        public List<Detail> Details { get; set; }// = new List<Detail>(); //

        public void OnGet()
        {
            LoadData();
        }

        private void LoadData()
        {
            Details = new List<Detail>();
            for (var i = 0; i < 5; i++)
            {
                Details.Add(new Detail
                {
                    AssignedId = i,
                    Name = "Dev Testing Task " + i,
                    Complete = (i % 2 == 0) ? true : false,
                    StartDate = Convert.ToDateTime("01/01/2019"),
                    EndDate = Convert.ToDateTime("01/01/2019"),
                    Lead = "John Doe",
                    //SaleId = i+1,
                    //ServiceId = i + 2,
                    AccessGranted = (i % 2 == 0) ? true : false,

                });
            }
        }

        public void OnPost()
        {
            // process the TaskDetails
        }
    }

    public class Detail
    {
        public int AssignedId { get; internal set; }
        public string  Name { get; internal set; }
        public bool Complete { get; internal set; }
        public DateTime  StartDate { get; internal set; }
        public DateTime  EndDate { get; internal set; }
        public string  Lead { get; internal set; }
        public bool AccessGranted { get; internal set; }
    }
}
@page
@model ##########################
@{
    ViewData["Title"] = "#####################";
}

<h1>EngagementingDetails</h1>
<form method="post">
    <table class="table">
        @foreach (var Detail in Model.Details)
        {
            <tr class="row">
                <td>
                    <input type="hidden" name="Details.Index" value="@Detail.AssignedId" />
                    <input type="hidden" name="Details[@Detail.AssignedId].AssignedId" value="@Detail.AssignedId" />
                </td>

                <td class="col">
                    <input type="checkbox" name="Details[@Detail.AssignedId].Complete" value="true" checked="@Detail.Complete" disabled="@Detail.AccessGranted" />
                </td>
                <td class="col">
                    <input type="hidden" name="Details[@Detail.AssignedId].Name" value="@Detail.Name" />
                    @Detail.Name
                </td>
                <td class="col">
                    <input type="hidden"
                           name="Details[@Detail.AssignedId].StartDate"
                           value="@Detail.StartDate" />
                    @Detail.StartDate.ToShortDateString()
                </td>
                <td class="col">
                    <input type="hidden"
                           name="Details[@Detail.AssignedId].EndDate"
                           value="@Detail.EndDate" />
                    @Detail.EndDate.ToShortDateString()
                </td>
                <td class="col">
                    <input type="hidden"
                           name="Details[@Detail.AssignedId].TechLead"
                           value="@Detail.TechLead" />
                    @Detail.TechLead
                </td>

            </tr>
        }
    </table>
    <button>Update</button>
</form>


<form method="post">
    <table class="table">
        <tr class="row">
            <th></th>
            <th class="col">Complete</th>
            <th class="col">Name</th>
            @*<th class="col">StartDate</th>
            <th class="col">EndDate</th>
            <th class="col">Lead</th>*@
        </tr>

        @foreach (var detail in Model.Details)
        {
            <tr class="form-group row">
                <td >
                    <input type="hidden" 
                           name="Details.Index" 
                           value="@detail.AssignedId" />
                    <input type="hidden" 
                           name="Details[@detail.AssignedId].AssignedId" 
                           value="@detail.AssignedId" />
                </td>

                <td class="col">
                    <input class="form-check-input"
                           type="checkbox"
                           name="Details[@detail.AssignedId].Complete"
                           value="true"
                           checked="@detail.Complete"
                           />
                </td>
                <td class="col">
                    <input class="form-control form-control-sm"
                           name="Details[@detail.AssignedId].Name" 
                           value="@detail.Name" readonly />                    
                </td>

            </tr>
        }
    </table>
    <button>Update</button>
</form>
  [BindProperty]
        public List<Detail> Details { get; set; } = new List<Detail>(); //

        public void OnGet()
        {
            LoadData();
        }

        private void LoadData()
        {
            //Details = new List<Detail>();
            for (var i = 0; i < 5; i++)
            {
                Details.Add(new Detail
                {
                    AssignedId = i,
                    Name = "Dev Testing Task " + i,
                    Complete = (i % 2 == 0) ? true : false,
                    //StartDate = Convert.ToDateTime("01/01/2019").AddDays(i + 1).AddMonths((i)+1),
                    //EndDate = Convert.ToDateTime("01/01/2019").AddDays((i + 1) + 15).AddMonths((i) + 1),
                    //Lead = "John Doe",
                    //SaleId = i+1,
                    //ServiceId = i + 2,
                    //AccessGranted = (i % 2 == 0) ? false : true,

                });
            }
        }

        public void OnPost()
        {
            // process the TaskDetails

            if(Details is null)
            {
                LoadData();
            }else if( Details[0] == null)
            {
                Details = new List<Detail>();
                LoadData();
            }
            else
            {
                Details = new List<Detail>();
                LoadData();
            }



        }
    }

    public class Detail
    {
        public int AssignedId { get; internal set; }
        public string Name { get; internal set; }
        public bool Complete { get; internal set; }
        //public DateTime StartDate { get; internal set; }
        //public DateTime EndDate { get; internal set; }
        //public string Lead { get; internal set; }
        //public bool AccessGranted { get; internal set; }
    }
        <form method="post">
            @foreach (var row in Model.DetailsHeaders)
            {
                <table class="table table-sm">
                    <thead>
                        <tr>
                            <th colspan="2" scope="colgroup">@Html.DisplayFor(c => row.ServiceAbbr)</th>
                            <th colspan="2" scope="colgroup">@Html.DisplayFor(c => row.ServiceName)</th>
                            <th colspan="2" scope="colgroup">@Html.DisplayFor(c => row.Qty) Hours/IPs/Locations</th>
                            <th colspan="2" scope="colgroup">@Html.DisplayFor(c => row.Description) Duration</th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach (var detail in Model.Details)
                        {
                            if (detail.ServiceId == row.ServicesId)
                            {
                                <tr>
                                    <td scope="row">
                                        <input type="hidden"
                                               name="Details.IndexId"
                                               value="@detail.IndexId" />
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].IndexId"
                                               value="@detail.IndexId" />
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].AssignedId"
                                               value="@detail.AssignedId" />
                                        @*@Html.DisplayFor(r => detail.AssignedId)*@
                                    </td>
                                    <td>
                                        <input type="checkbox"
                                               name="Details[@detail.IndexId].Complete"
                                               value="true"
                                               checked="@detail.Complete"
                                               disabled="@detail.EditAccess" />
                                    </td>
                                    <td>
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].Name"
                                               value="@detail.Name"
                                               readonly />
                                        @Html.DisplayFor(r => detail.Name)
                                    </td>
                                    <td>
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].StartDate"
                                               value="@detail.StartDate"
                                               readonly />
                                        @Html.DisplayFor(r => detail.StartDate)
                                    </td>
                                    <td>
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].EndDate"
                                               value="@detail.EndDate"
                                               readonly />
                                        @Html.DisplayFor(r => detail.EndDate)
                                    </td>
                                    <td>
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].LeadTech"
                                               value="@detail.LeadTech"
                                               readonly />
                                        @Html.DisplayFor(r => detail.LeadTech)
                                    </td>
                                    <td>
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].Tech2"
                                               value="@detail.Tech2"
                                               readonly />
                                        @Html.DisplayFor(r => detail.Tech2)
                                    </td>
                                    <td>
                                        <input type="hidden"
                                               name="Details[@detail.IndexId].Tech3"
                                               value="@detail.Tech3"
                                               readonly />
                                        @Html.DisplayFor(r => detail.Tech3)
                                    </td>
                                </tr>
                            }
                        }
                    </tbody>
                </table>
            }
            <button>Update</button>
        </form>