MVC CRUD 的两种方法
//Index.cshtml
@model IQueryable<MvcExam2.Models.Product>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@Html.ActionLink("添加", "Add", "ProductCrud")
</div>
<div>
<table>
<tr>
<th>ModelNumber</th>
<th>ModelName</th>
<th>UnitCost</th>
<th>修改</th>
<th>删除</th>
</tr>
@foreach(MvcExam2.Models.Product p in Model)
{
<tr>
<td>@p.ModelNumber</td>
<td>@p.ModelName</td>
<td>@p.UnitCost</td>
<td>@Html.ActionLink("修改", "Update", "ProductCrud",new RouteValueDictionary(new { id = @p.ProductID }),null)</td>
<td>@Html.ActionLink("删除","Delete","ProductCrud", new RouteValueDictionary(new { id = @p.ProductID }), null)</td>
</tr>
}
</table>
</div>
</body>
</html>
//Add.cshtml
@model MvcExam2.Models.Product
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Add</title>
</head>
<body>
<div>
@using (Html.BeginForm("Add", "ProductCrud", FormMethod.Post))
{
<span>ModelNumber:</span>@Html.TextBoxFor(p => p.ModelNumber);<br />
<span>ModelName:</span>@Html.TextBoxFor(p => p.ModelName);<br />
<span>UnitCost:</span>@Html.TextBoxFor(p=>p.UnitCost);<br />
<input type="submit" name="name" value="submit" />
}
</div>
</body>
</html>
//Update.cshtml
@model MvcExam2.Models.Product
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Update</title>
</head>
<body>
<div>
@using (Html.BeginForm("Update", "ProductCrud", FormMethod.Post))
{
@Html.HiddenFor(p=>p.ProductID)
<span>ModelNumber:</span>@Html.TextBoxFor(p => p.ModelNumber) <br />
<span>ModelName:</span>@Html.TextBoxFor(p => p.ModelName) <br />
<span>UnitCost:</span>@Html.TextBoxFor(p => p.UnitCost) <br />
<input type="submit" name="name" value="submit" />
}
</div>
</body>
</html>
//ProductCrudController
using MvcExam2.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Entity.Migrations;
namespace MvcExam2.Controllers
{
public class ProductCrudController : Controller
{
DbContext context = new StoreContext();
// GET: ProductCrud
public ActionResult Index()
{
IQueryable<Product> list = context.Set<Product>();
return View(list);
}
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Add(Product p)
{
p.CategoryID = 14;
//第一种方法:用curd方法
//context.Set<Product>().Add(p);
//第二种方法:用状态跟踪
context.Set<Product>().Attach(p);
context.Entry(p).State = EntityState.Added;
int result = context.SaveChanges();
if (result>0)
{
return Redirect(Url.Action("Index"));
}
else
{
return Redirect(Url.Action("Error"));
}
}
public ActionResult Update(int id)
{
ViewData.Model= context.Set<Product>().Where(p => p.ProductID == id).FirstOrDefault();
return View();
}
[HttpPost]
public ActionResult Update(Product p)
{
p.CategoryID = 14;
//第一种方法:用curd方法
// context.Set<Product>().AddOrUpdate(p);//需要引用System.Data.Entity.Migrations;
//第二种方法:用状态跟踪
context.Set<Product>().Attach(p);
context.Entry(p).State = EntityState.Modified;
int result = context.SaveChanges();
if (result > 0)
{
return Redirect(Url.Action("Index"));
}
else
{
return Redirect(Url.Action("Error"));
}
}
public ActionResult Delete(int id)
{
var product= context.Set<Product>().Where(p => p.ProductID == id).FirstOrDefault();
//第一种方法:用curd方法
//context.Set<Product>().Remove(obj);
//第二种方法:用状态跟踪
context.Set<Product>().Attach(product);
context.Entry(product).State = EntityState.Deleted;
int result = context.SaveChanges();
if (result > 0)
{
return Redirect(Url.Action("Index"));
}
else
{
return Redirect(Url.Action("Error"));
}
}
public ActionResult Error()
{
return View();
}
}
}
MVC CRUD 的两种方法的更多相关文章
- ASP.NET MVC 实现AJAX跨域请求的两种方法
通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据的加载,例如Google. 在ASP.NET MVC 框 ...
- .NET MVC中登录过滤器拦截的两种方法
今天给大家介绍两种ASP中过滤器拦截的两种方法. 一种是EF 的HtppModule,另一种则是灵活很多针对MVC的特性类 Attribute 具体什么是特性类可以参考着篇文章:https://www ...
- C# web api 返回类型设置为json的两种方法
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- android 之 启动画面的两种方法
现在,当我们打开任意的一个app时,其中的大部分都会显示一个启动界面,展示本公司的logo和当前的版本,有的则直接把广告放到了上面.启动画面的可以分为两种设置方式:一种是两个Activity实现,和一 ...
- [转载]C#读写txt文件的两种方法介绍
C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...
- php如何防止图片盗用/盗链的两种方法(转)
图片防盗链有什么用? 防止其它网站盗用你的图片,浪费你宝贵的流量.本文章向大家介绍php防止图片盗用/盗链的两种方法 Apache图片重定向方法 设置images目录不充许http访问 Apache服 ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- MongoDB实现分页(两种方法)
1.插入实验数据 偷懒用下samus,100条. ; i < ; i++) { Document doc = new Document(); doc["ID"] = i; d ...
随机推荐
- Docker入门之 - 如何安装Docker CE
原文:Docker入门之 - 如何安装Docker CE 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/article/det ...
- Android中的动画具体解释系列【3】——自己定义动画研究
在上一篇中我们使用到了位移动画TranslateAnimation,以下我们先来看看TranslateAnimation是怎样实现Animation中的抽象方法的: /* * Copyright (C ...
- zookeeper无法启动"Unable to load database on disk"
自己的虚拟机集群.一次强制关机后,发现slave2的zookeeper起不来了 http://blog.csdn.net/ashic/article/details/47088299 下午5点29:5 ...
- MySQL key分区(五)
具体描写叙述总结请看MySQL分区(一) 样例:该样例为本人个人学习总结分享->具体说明-->有问题欢迎前来交流
- Linux命令具体解释(2) – mv
文件位置: mv: /bin/mv /usr/share/man/man1/mv.1.gz 名称: mv - move (rename) files 使用方法: mv [ ...
- ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)
ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...
- [Angular] Reactive Form -- FormControl & formControlName, FormGroup, formGroup & formGroupName
First time dealing with Reactive form might be a little bit hard to understand. I have used Angular- ...
- Oracle数据库零散知识06 -- Package的定义与简单触发器
CREATE OR REPLACE PACKAGE pak_02 IS--包头 --这里可定义公共参数 FUNCTION fun_01 RETURN NUMBER; PROCEDURE pro_01 ...
- SQL表的最基本操作练习
use test go --select * from stu2 drop table stu2--删除表 go create table stu2 --新建一个名为stu2表 ( id int pr ...
- Crystal Report - 利用后台代码设计或实现水晶报表工具栏相关功能
水晶报表工具栏分页按钮响应事件: 水晶报表中有自带的分页功能,在设置好每页显示的记录后会自动分页,并自动记录总页数和保存当前页,在工具栏可以通过“首页”“尾页”“下一页”“上一页”和“跳页”进行页面跳 ...