ViewModel Mvc显示详细信息

时间:2016-03-13 11:24:38

标签: 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 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; }

}

MODEL2:

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

model3:

 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。 感谢

1 个答案:

答案 0 :(得分:0)

您的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; }

}

你详细说明ActionResult

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);
    }

如果你不想急于加载使用include。无需向POCO添加虚拟内容。

在你的细节ActionResult

 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);
        }

在此处阅读更多内容:https://msdn.microsoft.com/en-gb/data/jj574232.aspx