Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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# 视图模型列表中DateTime的良好实践和使用_C#_Datetime_Asp.net Core_Asp.net Mvc Viewmodel - Fatal编程技术网

C# 视图模型列表中DateTime的良好实践和使用

C# 视图模型列表中DateTime的良好实践和使用,c#,datetime,asp.net-core,asp.net-mvc-viewmodel,C#,Datetime,Asp.net Core,Asp.net Mvc Viewmodel,我正在为客户制作一个系统,而他没有使用fullcalendar,这是很实用的。这样,我在一个表中创建了AgendaId(int)和DateAgendar(DateTime)字段(大约20000行) 在此基础上,我设置了以下ViewModel: public class AgendaAgendamentoVM { public int Id { get; set; } public int? AgendamentoId { get; set; } public DateTi

我正在为客户制作一个系统,而他没有使用fullcalendar,这是很实用的。这样,我在一个表中创建了AgendaId(int)和DateAgendar(DateTime)字段(大约20000行)

在此基础上,我设置了以下ViewModel:

public class AgendaAgendamentoVM
{
    public int Id { get; set; }
    public int? AgendamentoId { get; set; }
    public DateTime Date { get; set; }
    public int? ClienteId { get; set; }
    public string ClienteNome { get; set; }
}
我还有第二个名为Reserva的表,其中包含以下字段:

public class Reserva
{
    public int ReservaId { get; set; }
    public int AgendaId { get; set; }

    [Required]
    public int ClienteId { get; set; }
    public string Servico { get; set; }

    public virtual Cliente Cliente { get; set; }
}
和客户:

public class Cliente
    {
        public int ClienteId { get; set; }

        [Column(TypeName = "varchar(50)")]
        public string Nome { get; set; }

        [Column(TypeName = "varchar(50)")]
        public string Telefone { get; set; }

        [Column(TypeName = "varchar(50)")]
        public string Endereco { get; set; }

        [Column(TypeName = "varchar(50)")]
        public string Email { get; set; }

        public DateTime DataCadastro { get; set; }

    }
下面的ViewModel代码每天从早上6点返回到晚上10点:

IList<AgendaAgendamentoVM> _listaAgendaVM = new List<AgendaAgendamentoVM>();

    if (!String.IsNullOrEmpty(mes))
    {
        var data = DateTime.Parse(mes);
        ViewBag.Data = data;
        ViewBag.Ontem = data.AddDays(-1);
        ViewBag.Amanha = data.AddDays(1);

        var dias = await _context.Agenda
        .Where(x => x.DataAgenda >= data.AddHours(6))
        .Where(x => x.DataAgenda <= data.AddHours(22))
        .ToListAsync();


        foreach (var item in dias)
        {
            AgendaAgendamentoVM li = new AgendaAgendamentoVM();
            li.Id = item.AgendaId;
            li.Date = DateTime.Parse(item.DataAgenda.ToString());
            _listaAgendaVM.Add(li);
        }

        ViewData["ListaAgenda"] = _listaAgendaVM;
        return View();
IList
    @foreach(ViewData[“ListaAgenda”]中的变量项)为 (列表) {
  • }
只有使用议程表,我才能在视图中显示“可导航”日历,如图所示:

仍然在预订表中,我有一个ClientId字段,在这里我返回一个特定的客户。在我创建的ViewModel列表中,我使用foreach调用Reservation and Customers表,如图所示:

问题是,执行此操作时,视图从早上6点到晚上10点停止显示整个列表,它只显示安排客户端的字段。我的目标是至少这样:


如何实现此目标:和/或另一个目标:是否有其他方法可以在不使用流行日期数据库的情况下实现此目标?

您似乎希望显示
客户端名称

首先,从您的预期结果图像来看,
Agenda
Reserva
之间应该是一对多的关系。然后您可以获得多个
ClientNome
以在razor视图中显示它。更改您的模型,如下所示:

public class Agenda
{
    public int AgendaId { get; set; }
    public DateTime DataAgenda { get; set; }
    public List<Reserva> Reserva { get; set; }
}
public class Reserva
{
    public int ReservaId { get; set; }
    public int AgendaId { get; set; }

    [Required]
    public int ClienteId { get; set; }
    public string Servico { get; set; }

    public virtual Cliente Cliente { get; set; }
}
public class Cliente
{
    public int ClienteId { get; set; }
    [Column(TypeName = "varchar(50)")]
    public string Nome { get; set; }

    [Column(TypeName = "varchar(50)")]
    public string Telefone { get; set; }

    [Column(TypeName = "varchar(50)")]
    public string Endereco { get; set; }

    [Column(TypeName = "varchar(50)")]
    public string Email { get; set; }
    public DateTime DataCadastro { get; set; }
}
public class AgendaAgendamentoVM
{
    public int Id { get; set; }
    public int? AgendamentoId { get; set; }
    public DateTime Date { get; set; }
    public int? ClienteId { get; set; }
    public List<string> ClienteNome { get; set; }
}
公共课堂议程
{
public int AgendaId{get;set;}
公共日期时间数据议程{get;set;}
公共列表保留{get;set;}
}
公共类预订
{
public int ReservaId{get;set;}
public int AgendaId{get;set;}
[必需]
公共int客户端ID{get;set;}
公共字符串Servico{get;set;}
公共虚拟客户端客户端{get;set;}
}
公共类客户
{
公共int客户端ID{get;set;}
[列(TypeName=“varchar(50)”)]
公共字符串Nome{get;set;}
[列(TypeName=“varchar(50)”)]
公共字符串电话{get;set;}
[列(TypeName=“varchar(50)”)]
公共字符串Endereco{get;set;}
[列(TypeName=“varchar(50)”)]
公共字符串电子邮件{get;set;}
公共日期时间数据目录{get;set;}
}
公共类AgendaAgendamentoVM
{
公共int Id{get;set;}
public int?AgendamentoId{get;set;}
公共日期时间日期{get;set;}
public int?客户ID{get;set;}
公共列表客户名称{get;set;}
}
视图:


    @foreach(ViewData[“ListaAgenda”]中的变量项)作为列表 }
控制器:

public async Task<IActionResult> Index(string mes)
{
    IList<AgendaAgendamentoVM> _listaAgendaVM = new List<AgendaAgendamentoVM>();
    if (!String.IsNullOrEmpty(mes))
    {
        var data = DateTime.Parse(mes);
        ViewBag.Data = data;
        ViewBag.Ontem = data.AddDays(-1);
        ViewBag.Amanha = data.AddDays(1);

        var dias = await _context.Agenda
        .Where(x => x.DataAgenda >= data.AddHours(6))
        .Where(x => x.DataAgenda <= data.AddHours(22))
        .ToListAsync();


        foreach (var item in dias)
        {
            var reservas = (from p in _context.Reservas
                            join c in _context.Clientes on p.ClienteId equals c.ClienteId
                            where p.AgendaId == item.AgendaId
                            select c).ToList();
            AgendaAgendamentoVM li = new AgendaAgendamentoVM();
            li.Id = item.AgendaId;
            li.Date = DateTime.Parse(item.DataAgenda.ToString());
            li.ClienteNome = reservas.Select(a => a.Nome).ToList();
            _listaAgendaVM.Add(li);
        }

        ViewData["ListaAgenda"] = _listaAgendaVM;
        return View();
    }
    return View();
}
公共异步任务索引(字符串)
{

IList

谢谢你,你的回答大大澄清了我的理解。从现在起,我所要做的就是在这种情况下使用a将一对多返回
    <form>
    <input type="date" name="mes" required /> <input type="submit" value="Enviar" />
</form>
<div class="row m-1 p-2 bg-success rounded">

    <div class="col-4">
        <a class="text-white" href="/Agenda/Index?mes=@String.Format("{0:d}", ViewBag.Ontem)"><</a>
    </div>

    <div class="col-4 text-center text-white font-weight-bolder">
        @String.Format("{0:d}", ViewBag.Data)
    </div>


    <div class="col-4 text-right">
        <a class="text-white" href="/Agenda/Index?mes=@String.Format("{0:d}", ViewBag.Amanha)">></a>
    </div>
</div>

<ul class="list-group m-1">
    @foreach (var item in ViewData["ListaAgenda"] as List<AgendaAgendamentoVM>)
    {
        <li class="list-group-item">
            <a href="#?agendaid=@item.Id">
                @String.Format("{0:HH:mm}",
                item.Date) - @foreach (var i in item.ClienteNome)
                {
                    @i @string.Format("  ")       @*change this*@
                }
            </a>
        </li>

    }
</ul>
public async Task<IActionResult> Index(string mes)
{
    IList<AgendaAgendamentoVM> _listaAgendaVM = new List<AgendaAgendamentoVM>();
    if (!String.IsNullOrEmpty(mes))
    {
        var data = DateTime.Parse(mes);
        ViewBag.Data = data;
        ViewBag.Ontem = data.AddDays(-1);
        ViewBag.Amanha = data.AddDays(1);

        var dias = await _context.Agenda
        .Where(x => x.DataAgenda >= data.AddHours(6))
        .Where(x => x.DataAgenda <= data.AddHours(22))
        .ToListAsync();


        foreach (var item in dias)
        {
            var reservas = (from p in _context.Reservas
                            join c in _context.Clientes on p.ClienteId equals c.ClienteId
                            where p.AgendaId == item.AgendaId
                            select c).ToList();
            AgendaAgendamentoVM li = new AgendaAgendamentoVM();
            li.Id = item.AgendaId;
            li.Date = DateTime.Parse(item.DataAgenda.ToString());
            li.ClienteNome = reservas.Select(a => a.Nome).ToList();
            _listaAgendaVM.Add(li);
        }

        ViewData["ListaAgenda"] = _listaAgendaVM;
        return View();
    }
    return View();
}