返璞歸真 asp.net mvc (1) - 添加、查詢、更新和刪除的 Demo
[索引頁(yè)]
[源碼下載]
作者:webabcd
介紹
以Northwind為示例數(shù)據(jù)庫(kù),使用asp.net mvc 1.0實(shí)現(xiàn)添加操作、查詢操作、更新操作和刪除操作
示例
1、Model(使用ADO.NET Entity Framework做ORM)
CategorySystem.cs(業(yè)務(wù)邏輯)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVC.Models
{
/// <summary>
/// MVC 之 Model
/// Category 業(yè)務(wù)層邏輯
/// </summary>
public class CategeorySystem
{
// Northwind 的 ObjectContext
private NorthwindEntities ctx = new NorthwindEntities();

/// <summary>
/// 獲取 Category 列表
/// </summary>
/// <returns></returns>
public List<Categories> GetCategory()
{
return ctx.Categories.ToList();
}

/// <summary>
/// 獲取 Category 實(shí)體
/// </summary>
/// <param name="categoryId">類別 ID</param>
/// <returns></returns>
public Categories GetCategory(int categoryId)
{
return ctx.Categories.FirstOrDefault(p => p.CategoryID == categoryId);
}
}
}
ProductSystem.cs(業(yè)務(wù)邏輯)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVC.Models
{
/// <summary>
/// MVC 之 Model
/// Product 業(yè)務(wù)層邏輯
/// </summary>
public class ProductSystem
{
// // Northwind 的 ObjectContext
private NorthwindEntities ctx = new NorthwindEntities();

/// <summary>
/// 獲取產(chǎn)品列表
/// </summary>
/// <param name="pageIndex">頁(yè)索引</param>
/// <param name="pageSize">頁(yè)大小</param>
/// <returns></returns>
public List<Products> GetProduct(int pageIndex, int pageSize)
{
return ctx.Products.OrderBy(p => p.ProductID).Skip(pageIndex * pageSize).Take(pageSize).ToList();
}

/// <summary>
/// 獲取產(chǎn)品
/// </summary>
/// <param name="productId">產(chǎn)品 ID</param>
/// <returns></returns>
public Products GetProduct(int productId)
{
return ctx.Products.FirstOrDefault(p => p.ProductID == productId);
}

/// <summary>
/// 新增產(chǎn)品
/// </summary>
/// <param name="product">產(chǎn)品的 Entity</param>
public void AddProduct(Products product)
{
ctx.AddToProducts(product);
}

/// <summary>
/// 刪除產(chǎn)品
/// </summary>
/// <param name="product">產(chǎn)品的 Entity</param>
public void DeleteProduct(Products product)
{
product.Order_Details.Load();
ctx.DeleteObject(product);
}

/// <summary>
/// 在此對(duì)象的上下文中保存修改(增/刪/改的操作)
/// </summary>
public void Save()
{
ctx.SaveChanges();
}

/// <summary>
/// 在此對(duì)象的上下文中創(chuàng)建 EntityKey
/// </summary>
/// <param name="entitySetName">實(shí)體集的名稱</param>
/// <param name="entity">實(shí)體</param>
/// <returns></returns>
public System.Data.EntityKey CreateEntityKey(string entitySetName, object entity)
{
return ctx.CreateEntityKey(entitySetName, entity);
}
}
}
ValidationEntity.cs(合法性驗(yàn)證)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVC.Models
{
/// <summary>
/// 驗(yàn)證信息的實(shí)體
/// </summary>
public class ValidationEntity
{
/// <summary>
/// 驗(yàn)證的錯(cuò)誤信息
/// </summary>
public string ErrorMessage { get; set; }
/// <summary>
/// 產(chǎn)生錯(cuò)誤信息的屬性名稱
/// </summary>
public string PropertyName { get; set; }
public ValidationEntity(string errorMessage)
{
ErrorMessage = errorMessage;
}

public ValidationEntity(string errorMessage, string propertyName)
{
ErrorMessage = errorMessage;
PropertyName = propertyName;
}
}
}
Product.cs(合法性驗(yàn)證)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVC.Models
{
/// <summary>
/// 擴(kuò)展 Product 實(shí)體
/// 主要是為了對(duì) Product 實(shí)體的各個(gè)屬性做輸入的合法性驗(yàn)證
/// </summary>
public partial class Products
{
List<ValidationEntity> info = new List<ValidationEntity>();

/// <summary>
/// 對(duì) Product 實(shí)體所做的修改是否通過了合法性驗(yàn)證
/// </summary>
public bool IsValid
{
get
{
return GetValidation().Count() == 0;
}
}
/// <summary>
/// 返回驗(yàn)證信息列表
/// </summary>
/// <returns></returns>
public List<ValidationEntity> GetValidation()
{
return info;
}

/// <summary>
/// 重寫部分方法 OnProductNameChanging
/// 用于在 ProductName 屬性改變前,對(duì)其做合法性驗(yàn)證
/// </summary>
/// <param name="value"></param>
partial void OnProductNameChanging(string value)
{
if (string.IsNullOrEmpty(value))
info.Add(new ValidationEntity("請(qǐng)輸入產(chǎn)品名稱", "ProductName"));
}

/// <summary>
/// 重寫部分方法 OnUnitPriceChanging
/// 用于在 UnitPrice 屬性改變前,對(duì)其做合法性驗(yàn)證
/// </summary>
/// <param name="value"></param>
partial void OnUnitPriceChanging(global::System.Nullable<decimal> value)
{
if (value == null)
info.Add(new ValidationEntity("請(qǐng)輸入單價(jià)", "UnitPrice"));
else if (((decimal)value) > 100)
info.Add(new ValidationEntity("輸入的單價(jià)過高", "UnitPrice"));
}
}
}
2、Controller
ProductController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

using MVC.Models;

namespace MVC.Controllers
{
/// <summary>
/// MVC 之 Controller
/// 這里體現(xiàn)了 Convention over Configuration
/// Controller 類必須以字符串 Controller 做類名稱的結(jié)尾,字符串 Controller 之前的字符串為 Controller 的名稱,類中的方法名為 Action 的名稱
/// 例如 ProductController, Controller 的名稱為:Product;其中的 Action 名稱有 Index, Details, Edit 等
/// </summary>
public class ProductController : Controller // 需要繼承自 System.Web.Mvc.Controller 或者實(shí)現(xiàn) IController 接口
{
ProductSystem ps = new ProductSystem();

// Action 的返回值必須為 ActionResult 或 void

/// <summary>
/// 獲取 Product 的列表
/// </summary>
/// <param name="pageIndex">頁(yè)索引</param>
/// <returns></returns>
public ActionResult Index(int pageIndex)
{
int pageSize = 10;
var products = ps.GetProduct(pageIndex, pageSize);

// 此 Action 對(duì)應(yīng)的 View 為(按查找的先后順序) Views/Product/Index.aspx, Views/Product/Index.ascx, Views/Shared/Index.aspx, Views/Shared/Index.ascx
// 其所對(duì)應(yīng)的 View 的關(guān)聯(lián)對(duì)象為 products
return View("Index", products);
}

public ActionResult Details(int id)
{
var product = ps.GetProduct(id);

if (product == null)
return View("NotFound");
else
// 對(duì)應(yīng)的 View 的名稱默認(rèn)為 Action 的名稱,所以此處所對(duì)應(yīng)的 View 的名稱為 Details
return View(product);
}

public ActionResult Edit(int id)
{
var product = ps.GetProduct(id);

if (product == null)
{
return View("NotFound");
}
else
{
product.CategoriesReference.Load();

// 編輯 Product 的時(shí)候需要在一個(gè) DropDownList 中選擇其所對(duì)應(yīng)的 Category, 所以這里要構(gòu)造一個(gè)名為 CategoryAll 的 ViewData
// 因?yàn)?nbsp;Categories 已經(jīng)是 Product 的屬性了,所以這里的 ViewData 的 key 不能為 Categories
if (product.Categories == null)
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName");
else
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName", product.Categories.CategoryID);

return View("Edit", product);
}
}

// 可以用 AcceptVerbs 來聲明 Action 所對(duì)應(yīng)的 http 方法
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
var product = ps.GetProduct(id);

// 可以通過這種方式一一為 Product 對(duì)象的屬性賦值
// product.ProductName = Request.Form["ProductName"];

// 也可以通過 UpdateModel, 讓系統(tǒng)自動(dòng)為屬性賦值(通過反射的方式,取得對(duì)象的屬性名稱,然后和 Request 的 key 做匹配,匹配成功的則賦值)
UpdateModel<Products>(product);

var category = new CategeorySystem().GetCategory(int.Parse(Request.Form["MyCategory"]));
product.CategoriesReference.EntityKey = ps.CreateEntityKey("Categories", category);

// 通過以下的方式讓 UpdateModel 只更新指定屬性
// string[] allowedProperties = new[] { "ProductName", "UnitPrice" };
// UpdateModel(product, allowedProperties);

if (!product.IsValid)
{
foreach (var validation in product.GetValidation())
{
// 設(shè)置驗(yàn)證信息
ModelState.AddModelError(validation.PropertyName, validation.ErrorMessage);
}

if (product.Categories == null)
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName");
else
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName", product.Categories.CategoryID);

return View(product);
}

ps.Save();

// 跳轉(zhuǎn)到指定的 Action
return RedirectToAction("Details", new { id = product.ProductID });
}

public ActionResult Create()
{
Products product = new Products()
{
ProductName = "請(qǐng)輸入產(chǎn)品名稱"
};

return View(product);
}

// 可以為參數(shù)添加聲明,如下例:[Bind(Include = "ProductName")],客戶端提交的數(shù)據(jù)中,只有 ProductName 會(huì)被綁定到 Product 對(duì)象上
// [Bind(Include = "ProductName")] 這樣的 attribute 也可以聲明在類上,用于指定類中需要被綁定的屬性
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Include = "ProductName")] Products product)
{
if (!product.IsValid)
{
foreach (var issue in product.GetValidation())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}

return View(product);
}

ps.AddProduct(product);
ps.Save();

return RedirectToAction("Details", new { id = product.ProductID });
}

public ActionResult Delete(int id)
{
var product = ps.GetProduct(id);

if (product == null)
return View("NotFound");
else
return View(product);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, string confirmButton)
{
var product = ps.GetProduct(id);

if (product == null)
return View("NotFound");

ps.DeleteProduct(product);
ps.Save();

return View("Deleted");
}
}
}
3、View(以列表頁(yè)為例)
Index.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MVC.Models.Products>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Index</h2>
<table>
<tr>
<th>
</th>
<th>
ProductID
</th>
<th>
ProductName
</th>
<th>
UnitPrice
</th>
</tr>
<% // 因?yàn)楸卷?yè)集成了 System.Web.Mvc.ViewPage<IEnumerable<MVC.Models.Products>>
// 所以這里的 Model 就是 System.Web.Mvc.ViewPage<IEnumerable<MVC.Models.Products>> 的 Model 屬性
foreach (var item in Model)
{ %>
<tr>
<td>
<!--這里的 Html 屬性類型為 System.Web.Mvc.HtmlHelper-->
<%= Html.ActionLink("Delete", "Delete", new { id = item.ProductID })%>
|
<%= Html.ActionLink("Edit", "Edit", new { id = item.ProductID }) %>
</td>
<td>
<%= Html.ActionLink(item.ProductID.ToString(), "Details", new { id=item.ProductID })%>
</td>
<td>
<%= Html.Encode(item.ProductName) %>
</td>
<td>
<%= Html.Encode(String.Format("{0:F}", item.UnitPrice)) %>
</td>
</tr>
<% } %>
</table>
<p>
<%= Html.RouteLink("上一頁(yè)", "Products", new { pageIndex = Convert.ToInt32(Html.ViewContext.RouteData.Values["pageIndex"]) - 1 })%>
|
<%= Html.RouteLink("下一頁(yè)", "Products", new { pageIndex = Convert.ToInt32(Html.ViewContext.RouteData.Values["pageIndex"]) + 1 })%>
</p>
</asp:Content>
OK
[源碼下載]
[源碼下載]
返璞歸真 asp.net mvc (1) - 添加、查詢、更新和刪除的 Demo
作者:webabcd
介紹
以Northwind為示例數(shù)據(jù)庫(kù),使用asp.net mvc 1.0實(shí)現(xiàn)添加操作、查詢操作、更新操作和刪除操作
示例
1、Model(使用ADO.NET Entity Framework做ORM)
CategorySystem.cs(業(yè)務(wù)邏輯)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVC.Models
{
/// <summary>
/// MVC 之 Model
/// Category 業(yè)務(wù)層邏輯
/// </summary>
public class CategeorySystem
{
// Northwind 的 ObjectContext
private NorthwindEntities ctx = new NorthwindEntities();
/// <summary>
/// 獲取 Category 列表
/// </summary>
/// <returns></returns>
public List<Categories> GetCategory()
{
return ctx.Categories.ToList();
}
/// <summary>
/// 獲取 Category 實(shí)體
/// </summary>
/// <param name="categoryId">類別 ID</param>
/// <returns></returns>
public Categories GetCategory(int categoryId)
{
return ctx.Categories.FirstOrDefault(p => p.CategoryID == categoryId);
}
}
}
ProductSystem.cs(業(yè)務(wù)邏輯)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVC.Models
{
/// <summary>
/// MVC 之 Model
/// Product 業(yè)務(wù)層邏輯
/// </summary>
public class ProductSystem
{
// // Northwind 的 ObjectContext
private NorthwindEntities ctx = new NorthwindEntities();
/// <summary>
/// 獲取產(chǎn)品列表
/// </summary>
/// <param name="pageIndex">頁(yè)索引</param>
/// <param name="pageSize">頁(yè)大小</param>
/// <returns></returns>
public List<Products> GetProduct(int pageIndex, int pageSize)
{
return ctx.Products.OrderBy(p => p.ProductID).Skip(pageIndex * pageSize).Take(pageSize).ToList();
}
/// <summary>
/// 獲取產(chǎn)品
/// </summary>
/// <param name="productId">產(chǎn)品 ID</param>
/// <returns></returns>
public Products GetProduct(int productId)
{
return ctx.Products.FirstOrDefault(p => p.ProductID == productId);
}
/// <summary>
/// 新增產(chǎn)品
/// </summary>
/// <param name="product">產(chǎn)品的 Entity</param>
public void AddProduct(Products product)
{
ctx.AddToProducts(product);
}
/// <summary>
/// 刪除產(chǎn)品
/// </summary>
/// <param name="product">產(chǎn)品的 Entity</param>
public void DeleteProduct(Products product)
{
product.Order_Details.Load();
ctx.DeleteObject(product);
}
/// <summary>
/// 在此對(duì)象的上下文中保存修改(增/刪/改的操作)
/// </summary>
public void Save()
{
ctx.SaveChanges();
}
/// <summary>
/// 在此對(duì)象的上下文中創(chuàng)建 EntityKey
/// </summary>
/// <param name="entitySetName">實(shí)體集的名稱</param>
/// <param name="entity">實(shí)體</param>
/// <returns></returns>
public System.Data.EntityKey CreateEntityKey(string entitySetName, object entity)
{
return ctx.CreateEntityKey(entitySetName, entity);
}
}
}
ValidationEntity.cs(合法性驗(yàn)證)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVC.Models
{
/// <summary>
/// 驗(yàn)證信息的實(shí)體
/// </summary>
public class ValidationEntity
{
/// <summary>
/// 驗(yàn)證的錯(cuò)誤信息
/// </summary>
public string ErrorMessage { get; set; }
/// <summary>
/// 產(chǎn)生錯(cuò)誤信息的屬性名稱
/// </summary>
public string PropertyName { get; set; }
public ValidationEntity(string errorMessage)
{
ErrorMessage = errorMessage;
}
public ValidationEntity(string errorMessage, string propertyName)
{
ErrorMessage = errorMessage;
PropertyName = propertyName;
}
}
}
Product.cs(合法性驗(yàn)證)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVC.Models
{
/// <summary>
/// 擴(kuò)展 Product 實(shí)體
/// 主要是為了對(duì) Product 實(shí)體的各個(gè)屬性做輸入的合法性驗(yàn)證
/// </summary>
public partial class Products
{
List<ValidationEntity> info = new List<ValidationEntity>();
/// <summary>
/// 對(duì) Product 實(shí)體所做的修改是否通過了合法性驗(yàn)證
/// </summary>
public bool IsValid
{
get
{
return GetValidation().Count() == 0;
}
}
/// <summary>
/// 返回驗(yàn)證信息列表
/// </summary>
/// <returns></returns>
public List<ValidationEntity> GetValidation()
{
return info;
}
/// <summary>
/// 重寫部分方法 OnProductNameChanging
/// 用于在 ProductName 屬性改變前,對(duì)其做合法性驗(yàn)證
/// </summary>
/// <param name="value"></param>
partial void OnProductNameChanging(string value)
{
if (string.IsNullOrEmpty(value))
info.Add(new ValidationEntity("請(qǐng)輸入產(chǎn)品名稱", "ProductName"));
}
/// <summary>
/// 重寫部分方法 OnUnitPriceChanging
/// 用于在 UnitPrice 屬性改變前,對(duì)其做合法性驗(yàn)證
/// </summary>
/// <param name="value"></param>
partial void OnUnitPriceChanging(global::System.Nullable<decimal> value)
{
if (value == null)
info.Add(new ValidationEntity("請(qǐng)輸入單價(jià)", "UnitPrice"));
else if (((decimal)value) > 100)
info.Add(new ValidationEntity("輸入的單價(jià)過高", "UnitPrice"));
}
}
}
2、Controller
ProductController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MVC.Models;
namespace MVC.Controllers
{
/// <summary>
/// MVC 之 Controller
/// 這里體現(xiàn)了 Convention over Configuration
/// Controller 類必須以字符串 Controller 做類名稱的結(jié)尾,字符串 Controller 之前的字符串為 Controller 的名稱,類中的方法名為 Action 的名稱
/// 例如 ProductController, Controller 的名稱為:Product;其中的 Action 名稱有 Index, Details, Edit 等
/// </summary>
public class ProductController : Controller // 需要繼承自 System.Web.Mvc.Controller 或者實(shí)現(xiàn) IController 接口
{
ProductSystem ps = new ProductSystem();
// Action 的返回值必須為 ActionResult 或 void 
/// <summary>
/// 獲取 Product 的列表
/// </summary>
/// <param name="pageIndex">頁(yè)索引</param>
/// <returns></returns>
public ActionResult Index(int pageIndex)
{
int pageSize = 10;
var products = ps.GetProduct(pageIndex, pageSize);
// 此 Action 對(duì)應(yīng)的 View 為(按查找的先后順序) Views/Product/Index.aspx, Views/Product/Index.ascx, Views/Shared/Index.aspx, Views/Shared/Index.ascx
// 其所對(duì)應(yīng)的 View 的關(guān)聯(lián)對(duì)象為 products
return View("Index", products);
}
public ActionResult Details(int id)
{
var product = ps.GetProduct(id);
if (product == null)
return View("NotFound");
else
// 對(duì)應(yīng)的 View 的名稱默認(rèn)為 Action 的名稱,所以此處所對(duì)應(yīng)的 View 的名稱為 Details
return View(product);
}
public ActionResult Edit(int id)
{
var product = ps.GetProduct(id);
if (product == null)
{
return View("NotFound");
}
else
{
product.CategoriesReference.Load();
// 編輯 Product 的時(shí)候需要在一個(gè) DropDownList 中選擇其所對(duì)應(yīng)的 Category, 所以這里要構(gòu)造一個(gè)名為 CategoryAll 的 ViewData
// 因?yàn)?nbsp;Categories 已經(jīng)是 Product 的屬性了,所以這里的 ViewData 的 key 不能為 Categories
if (product.Categories == null)
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName");
else
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName", product.Categories.CategoryID);
return View("Edit", product);
}
}
// 可以用 AcceptVerbs 來聲明 Action 所對(duì)應(yīng)的 http 方法
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
var product = ps.GetProduct(id);
// 可以通過這種方式一一為 Product 對(duì)象的屬性賦值
// product.ProductName = Request.Form["ProductName"];
// 也可以通過 UpdateModel, 讓系統(tǒng)自動(dòng)為屬性賦值(通過反射的方式,取得對(duì)象的屬性名稱,然后和 Request 的 key 做匹配,匹配成功的則賦值)
UpdateModel<Products>(product);
var category = new CategeorySystem().GetCategory(int.Parse(Request.Form["MyCategory"]));
product.CategoriesReference.EntityKey = ps.CreateEntityKey("Categories", category);
// 通過以下的方式讓 UpdateModel 只更新指定屬性
// string[] allowedProperties = new[] { "ProductName", "UnitPrice" };
// UpdateModel(product, allowedProperties);
if (!product.IsValid)
{
foreach (var validation in product.GetValidation())
{
// 設(shè)置驗(yàn)證信息
ModelState.AddModelError(validation.PropertyName, validation.ErrorMessage);
}
if (product.Categories == null)
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName");
else
ViewData["CategoryAll"] = new SelectList(new CategeorySystem().GetCategory(), "CategoryId", "CategoryName", product.Categories.CategoryID);
return View(product);
}
ps.Save();
// 跳轉(zhuǎn)到指定的 Action
return RedirectToAction("Details", new { id = product.ProductID });
}
public ActionResult Create()
{
Products product = new Products()
{
ProductName = "請(qǐng)輸入產(chǎn)品名稱"
};
return View(product);
}
// 可以為參數(shù)添加聲明,如下例:[Bind(Include = "ProductName")],客戶端提交的數(shù)據(jù)中,只有 ProductName 會(huì)被綁定到 Product 對(duì)象上
// [Bind(Include = "ProductName")] 這樣的 attribute 也可以聲明在類上,用于指定類中需要被綁定的屬性
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Include = "ProductName")] Products product)
{
if (!product.IsValid)
{
foreach (var issue in product.GetValidation())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(product);
}
ps.AddProduct(product);
ps.Save();
return RedirectToAction("Details", new { id = product.ProductID });
}
public ActionResult Delete(int id)
{
var product = ps.GetProduct(id);
if (product == null)
return View("NotFound");
else
return View(product);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, string confirmButton)
{
var product = ps.GetProduct(id);
if (product == null)
return View("NotFound");
ps.DeleteProduct(product);
ps.Save();
return View("Deleted");
}
}
}3、View(以列表頁(yè)為例)
Index.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MVC.Models.Products>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Index</h2>
<table>
<tr>
<th>
</th>
<th>
ProductID
</th>
<th>
ProductName
</th>
<th>
UnitPrice
</th>
</tr>
<% // 因?yàn)楸卷?yè)集成了 System.Web.Mvc.ViewPage<IEnumerable<MVC.Models.Products>>
// 所以這里的 Model 就是 System.Web.Mvc.ViewPage<IEnumerable<MVC.Models.Products>> 的 Model 屬性
foreach (var item in Model)
{ %>
<tr>
<td>
<!--這里的 Html 屬性類型為 System.Web.Mvc.HtmlHelper-->
<%= Html.ActionLink("Delete", "Delete", new { id = item.ProductID })%>
|
<%= Html.ActionLink("Edit", "Edit", new { id = item.ProductID }) %>
</td>
<td>
<%= Html.ActionLink(item.ProductID.ToString(), "Details", new { id=item.ProductID })%>
</td>
<td>
<%= Html.Encode(item.ProductName) %>
</td>
<td>
<%= Html.Encode(String.Format("{0:F}", item.UnitPrice)) %>
</td>
</tr>
<% } %>
</table>
<p>
<%= Html.RouteLink("上一頁(yè)", "Products", new { pageIndex = Convert.ToInt32(Html.ViewContext.RouteData.Values["pageIndex"]) - 1 })%>
|
<%= Html.RouteLink("下一頁(yè)", "Products", new { pageIndex = Convert.ToInt32(Html.ViewContext.RouteData.Values["pageIndex"]) + 1 })%>
</p>
</asp:Content>
OK
[源碼下載]


浙公網(wǎng)安備 33010602011771號(hào)