Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
Asp.net mvc ViewModel Mvc显示详细信息_Asp.net Mvc - Fatal编程技术网

Asp.net mvc ViewModel Mvc显示详细信息

Asp.net mvc ViewModel Mvc显示详细信息,asp.net-mvc,Asp.net Mvc,所以我有3个模型,需要在3个模型上的视图中显示信息,所以我创建了一个viewModel,其中包含我需要的视图信息 模式1: public class Despesa { public int TipoDespesaId { get; set; } public int DespesaId { get; set; } [Display(Name = "Descrição da Despesa")] [Required] public string Des

所以我有3个模型,需要在3个模型上的视图中显示信息,所以我创建了一个viewModel,其中包含我需要的视图信息

模式1:

public class Despesa
{
    public int TipoDespesaId { get; set; }

    public int DespesaId { get; set; }

    [Display(Name = "Descrição da Despesa")]
    [Required]
    public string DespesaDescricao { get; set; }

    [Display(Name = "Valor")]
    [Required]
    public decimal DespesaValor { get; set; }

    public int TipoPagamentoId { get; set; }

    [Display(Name = "Data")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}",ApplyFormatInEditMode = true)]
    [Required]
    public DateTime Data { get; set; }

    public TipoDespesa TipoDespesa { get; set; }

    public TipoPagamento TipoPagamento { get; set; }

    [Display(Name = "Comentário")]
    public string Comentario { get; set; }

}
模式2:

 public class TipoDespesa
{
    public int TipoDespesaId { get; set; }
    [Display(Name = "Tipo de Despesa")]
    [Required]
    public string TipoDespesaNome { get; set; }
}
模式3:

 public class TipoPagamento
{
    public int TipoPagamentoId { get; set; }
    [Display(Name = "Tipo de Pagamento")]
    [Required]
    public string TipoPagamentoNome { get; set; }
}
myViewModel:

 public class ViewModelDetalhes
{
    public string TipoDespesa { get; set; }
    public string TipoPagamento { get; set; }
    public string Descricao { get; set; }
    public decimal Valor { get; set; }
    public DateTime Data { get; set; }
    public string comentario { get; set; }


}
我的详细资料:

public ActionResult Details(int? id)
    {
        var modelo = db.Despesas.Where(p => p.DespesaId == id).FirstOrDefault();
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        if (modelo == null)
        {
            return HttpNotFound();
        }
        ViewModelDetalhes model = new ViewModelDetalhes()
        {
            TipoDespesa = modelo.TipoDespesa,
            TipoPagamento = modelo.TipoPagamento,
            Descricao = modelo.DespesaDescricao,
            Valor = modelo.DespesaValor,
            comentario = modelo.Comentario,

        };
        return View(model);
    }
我不知道怎样才能得到TipoPagamento和TipoDespesa的值我应该在modelo上做一个包含吗?我有点困惑,需要知道如何检索与主类Despesas关联的TipoPagamento和TipoDespesa值。 谢谢您的ViewModel

public class ViewModelDetalhes
{
    public string TipoDespesa{ get; set; }
    public string TipoPagamento { get; set; }
    public string Descricao { get; set; }
    public decimal Valor { get; set; }
    public DateTime Data { get; set; }
    public string comentario { get; set; }


}
如果您想延迟加载,请使用虚拟机

public class Despesa
{
    public int TipoDespesaId { get; set; }

    public int DespesaId { get; set; }

    [Display(Name = "Descrição da Despesa")]
    [Required]
    public string DespesaDescricao { get; set; }

    [Display(Name = "Valor")]
    [Required]
    public decimal DespesaValor { get; set; }

    public int TipoPagamentoId { get; set; }

    [Display(Name = "Data")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}",ApplyFormatInEditMode = true)]
    [Required]
    public DateTime Data { get; set; }

    public virtual TipoDespesa TipoDespesa { get; set; }

    public virtual TipoPagamento TipoPagamento { get; set; }

    [Display(Name = "Comentário")]
    public string Comentario { get; set; }

}
你可以详细说明行动结果

public ActionResult Details(int? id)
    {
        var modelo = db.Despesas.Where(p => p.DespesaId == id).FirstOrDefault();
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        if (modelo == null)
        {
            return HttpNotFound();
        }
        ViewModelDetalhes model = new ViewModelDetalhes()
        {
            TipoDespesa = modelo.TipoDespesa.TipoDespesaNome ,
            TipoPagamento = modelo.TipoPagamento.TipoPagamentoNome,
            Descricao = modelo.DespesaDescricao,
            Valor = modelo.DespesaValor,
            comentario = modelo.Comentario,

        };
        return View(model);
    }
 public ActionResult Details(int? id)
        {
            var modelo = db.Despesas.Include("TipoDespesa").Include("TipoPagamento").Where(p => p.DespesaId == id).FirstOrDefault();
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            if (modelo == null)
            {
                return HttpNotFound();
            }
            ViewModelDetalhes model = new ViewModelDetalhes()
            {
                TipoDespesa = modelo.TipoDespesa.TipoDespesaNome ,
                TipoPagamento = modelo.TipoPagamento.TipoPagamentoNome,
                Descricao = modelo.DespesaDescricao,
                Valor = modelo.DespesaValor,
                comentario = modelo.Comentario,

            };
            return View(model);
        }
如果不想立即加载,请使用include。无需将虚拟设备添加到POCO

在你的详细行动结果

public ActionResult Details(int? id)
    {
        var modelo = db.Despesas.Where(p => p.DespesaId == id).FirstOrDefault();
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        if (modelo == null)
        {
            return HttpNotFound();
        }
        ViewModelDetalhes model = new ViewModelDetalhes()
        {
            TipoDespesa = modelo.TipoDespesa.TipoDespesaNome ,
            TipoPagamento = modelo.TipoPagamento.TipoPagamentoNome,
            Descricao = modelo.DespesaDescricao,
            Valor = modelo.DespesaValor,
            comentario = modelo.Comentario,

        };
        return View(model);
    }
 public ActionResult Details(int? id)
        {
            var modelo = db.Despesas.Include("TipoDespesa").Include("TipoPagamento").Where(p => p.DespesaId == id).FirstOrDefault();
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            if (modelo == null)
            {
                return HttpNotFound();
            }
            ViewModelDetalhes model = new ViewModelDetalhes()
            {
                TipoDespesa = modelo.TipoDespesa.TipoDespesaNome ,
                TipoPagamento = modelo.TipoPagamento.TipoPagamentoNome,
                Descricao = modelo.DespesaDescricao,
                Valor = modelo.DespesaValor,
                comentario = modelo.Comentario,

            };
            return View(model);
        }

阅读更多信息:

一些问题,在这种情况下,虚拟是为了什么??,我理解了在没有包含的情况下如何做同样的事情,我想如果我创建了modelview,我不需要使用包含:包含工作,但是,如果我们可以使用includes:SInclude关键字执行所有操作,那么为什么要使用viewModel呢。如果您对该属性使用了Virtual,则不需要在Linq查询中使用Include。另一方面,ViewModel只是一个类,用于指定要在视图中显示的内容。在您的情况下,您不需要viewModel,您可以使用Despesas模型。但是,通过使用viewModel,您只选择了要在视图中显示的特性。很好,在带宽、安全性、处理等方面,你没有额外的属性。。。作为一个好的实践,我总是使用viewModelViewModel,它并不是Include的替代品。它们是完全不同的东西。所以基本上ViewModel可以使代码更清晰,对吗?因为在我的情况下,正如你所说,我不需要ViewModel,我可以只包含我需要的类并使用atirbutes,使用虚拟是一种好的做法吗??