需要帮助计数记录的MVC Web应用程序

本文关键字:MVC Web 应用程序 记录 帮助 | 更新日期: 2023-09-27 18:10:23

我只是学习如何从Visual Studio产生的代码(MVC实体框架)中偏离。我有一个显示联系人表内容的视图。我有另一页,我想数一下记录。(显然这是一种过度简化)。我有一个"Contact"表的模型和控制器。我有一个模型和一个控制器的"统计",但我得到各种各样的混合结果从各种教程和问题回答。有人能告诉我如何在"统计"页面上填充计数吗?老实说,我只做了一个星期,甚至在声明变量时都很困难。

这是我的联系人模型:

using System.ComponentModel.DataAnnotations;
using System.Globalization;
namespace BasicContacts.Models
{
    public class Contact
    {
        public int ContactID { get; set; }
        [DataType(DataType.Date)]
        [Display(Name = "Intake Date")]
        public string DateIntake { get; set; }
        [Display(Name = "First Name")]
        public string NameFirst { get; set; }
    }
}

我的联系人控制器:

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 BasicContacts.Models;
namespace BasicContacts.Controllers
{
    public class CtController : Controller
    {
        private ApplicationDbContext db = new ApplicationDbContext();
        // GET: /Ct/
        public ActionResult Index()
        {
            return View(db.Contacts.ToList());
        }
        // GET: /Ct/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Contact contact = db.Contacts.Find(id);
            if (contact == null)
            {
                return HttpNotFound();
            }
            return View(contact);
        }
        // GET: /Ct/Create
        public ActionResult Create()
        {
            return View();
        }
        // POST: /Ct/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include="ContactID,DateIntake,NameFirst")] Contact contact)
        {
            if (ModelState.IsValid)
            {
                db.Contacts.Add(contact);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(contact);
        }
        // GET: /Ct/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Contact contact = db.Contacts.Find(id);
            if (contact == null)
            {
                return HttpNotFound();
            }
            return View(contact);
        }
        // POST: /Ct/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include="ContactID,DateIntake,NameFirst")] Contact contact)
        {
            if (ModelState.IsValid)
            {
                db.Entry(contact).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(contact);
        }
        // GET: /Ct/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Contact contact = db.Contacts.Find(id);
            if (contact == null)
            {
                return HttpNotFound();
            }
            return View(contact);
        }
        // POST: /Ct/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Contact contact = db.Contacts.Find(id);
            db.Contacts.Remove(contact);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}

联系人索引页:

@model IEnumerable<BasicContacts.Models.Contact>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.DateIntake)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.NameFirst)
        </th>
        <th></th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.DateIntake)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NameFirst)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ContactID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ContactID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ContactID })
        </td>
    </tr>
}
</table>

显然有一个共享的布局页面。

那么我如何在Visual Studio中创建一个"统计"模型和控制器,它应该包含什么才能显示一个SQL查询,计算"联系人"中的记录?如果我可以使用MVC html帮助器,那将是一个额外的好处,它似乎与当前的架构最一致。

需要帮助计数记录的MVC Web应用程序

就我个人而言,我不喜欢在视图中做任何计算(个人偏好)。

我在控制器动作Stats中执行所有计数/聚合/总和/百分比,并创建一个模型,其中包含我想要显示的每个统计数据的属性。

然后我用html助手创建我的统计视图,这些html助手在视图中显示这些模型属性。

如果不明白,请告诉我。HTH