我正在学习如何偏离Visual Studio生成的代码(MVC实体框架)。我有一个显示联系人表格内容的视图。我有另一个页面,我想计算记录。 (显然这是一个过度简化)。我有一个“联系”表的模型和控制器。我有一个模型和控制器的“统计”,但我从各种教程和问题得到了各种各样的混合结果。有人可以帮助我了解如何填充“统计”页面上的计数吗?老实说,我只在这一周工作,甚至很难宣布变量。
这是我的联系人型号:
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助手,那么作为奖励。
答案 0 :(得分:0)
就个人而言,我不想在视图中做任何计算(个人偏好)。
我在控制器操作统计信息中执行所有计数/聚合/总和/百分比,并创建一个模型,其中包含我要显示的每个统计信息的属性。
然后我使用html帮助器创建我的统计视图,在视图中显示这些模型属性。
如果这没有意义,请告诉我。 HTH