C# - 如何在ASP.NET MVC

时间:2016-02-29 01:39:27

标签: c# mysql asp.net asp.net-mvc asp.net-mvc-4

好的,所以我创建了我的数据库,其中包含6行:

  • ID
  • DisplayName的
  • 日期
  • 金额
  • TaxBonus
  • 注释

现在这是有效的,我使用局部视图将其显示在我的视图上。我坚持的部分是显示特定记录。我想要做的是在我的数据库中显示与我的数据库中的enitre记录相同的视图中的三条记录。在顶部将是这三个记录然后一个单独的表将具有所有记录。原因是因为我希望在视图上显示最高的捐赠(金额)。我首先不知道如何在经过数小时的研究后显示特定记录,其次是显示最高记录。

以下代码将帮助您了解更多信息:

控制器

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using CharitySite.Models;

namespace CharitySite.Controllers
{
    public class CharitiesController : Controller
    {
        private CharityDBContext db = new CharityDBContext();

        // GET: Charities
        public ActionResult Index()
        {
            return View(db.Donations.ToList());
        }

型号

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace CharitySite.Models
{
    public class Charity
    {
        public int ID { get; set; }
        public string DisplayName { get; set; }
        public DateTime Date { get; set; }
        public Double Amount { get; set; }
        public Double TaxBonus { get; set; }
        public String Comment { get; set; }
    }

    public class CharityDBContext : DbContext //controls information in database 
    {
        public DbSet<Charity> Donations { get; set; } //creates a donation database
    }
}

查看

@model IEnumerable<CharitySite.Models.Charity>

@{
    ViewBag.Title = "Index";

}


<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/bootstrap.css")" rel="stylesheet" type="text/css" />
<div id="header">

    <h1>Syria</h1>
    <h4>DONATIONS</h4>

</div>

<div class="half-col">
   @Html.Partial("_Database", Model);

</div>

简单来说,我需要的是:

  1. 在视图中显示特定记录
  2. 显示最高捐款(金额) - 在视图中显示其姓名和评论
  3. 到处研究这个但我找不到任何东西,为什么我来这里问你们是否有人知道解决这个问题的方法。

    P.S - 我正在使用Visual Studio Community 2015和ASP.NET以及MVC模板(C#)

1 个答案:

答案 0 :(得分:1)

所以基本上你需要一个视图模型,它具有最高捐赠金额记录和所有捐赠记录的属性。所以,让我们创建一个。

public class DonationVm
{
  public decimal Amount { set;get;}
  public string DisplayName { set;get;}
  public string Comment { set;get;}
}
public class DonationListVm
{
  public DonationVm Highest { set;get;}
  public List<DonationVm> All { set;get;} 
  public DonationListVm()
  {
     this.Highest = new DonationVm();
     this.All = new List<DonationVm>();
  } 
}

在您的GET操作方法中,创建一个DonationListVm对象,为这两个属性加载数据并传递给视图。您可以通过Amount属性执行降序操作,并获取第一条记录以获取最高金额的记录。

public ActionResult Index()
{
   var vm=new DonationListVm();
   var all =db.Donations.OrderByDescending(s=>s.Amount);
   if(all.Any())
   { 
     //Get the highest amount record
      var h = all.First();
      vm.Highest.Name=h.Name;
      vm.Highest.Amount = h.Amount;
      vm.Highest.Comment = h.Comment;
   }
   //Get all the records
   vm.All=all.Select(x=>new DonationVm { Amount=x.Amount, 
                                 Comment=x.Comment, 
                                 DisplayName =x.DisplayName}).ToList();
   return View(vm);
}

现在,您的视图应该强烈输入我们的新视图模型

@model DonationListVm
<h2>Highest</h2>
<p>@Model.Highest.Amount</p>
<p>@Model.Highest.DisplayName</p>

<h3>All donations</h3>
@foreach(var item in Model.All)
{
  <p>@item.DisplayName - @item.Amount</p>
}

如果您想要显示3个最高捐款而不只是一个,请将Highest的{​​{1}}属性更改为集合

DonationListVm

并在您的操作方法中使用Take方法获取3个项目。

public class DonaltionListVm
{
  public List<DonationVm> Highest { set;get;} 
  public List<DonationVm> All { set;get;}
}

并且在您看来,您需要遍历var vm=new DonationListVm(); vm.All=db.Donations.Select(x=>new DonationVm { Amount =x.Amount, Comment =x.Comment,DisplayName=x.DisplayName }).ToList(); //sort based on amount then take top 3 records vm.Highest=cm.All.OrderByDescending(y=>y.Amount).Take(3) .Select(a=>new DonationVm { Amount=a.Amount, Comment=a.Comment, DisplayName=a.DisplayName}).ToList(); return View(vm); 属性并显示每个项目的金额和评论