asp.net朱勇项目个人博客(3)

news/2024/5/20 23:10:21

引文:按照书上的项目,我们最后实现管理端的三个增删改查的功能即可,相对与三个增删改查,文章,分类和留言,这里我们所需要用的的关联的一个表就是文章表,因为文章表每一个文章的增加显示和修改都需要对应的一个分类,也就是这三个增删改查稍微复杂的一个点.
 

第一部分:

我们首先来实现文章的增删改查功能:

首先我们添加控制器,按照我的步骤添加如下的控制器。


在控制部分需要修改的代码就是这个一个,我们需要有一个分页的实现,然后还要有一个关于Category的一个Id关联,

然后在创建和编辑的时候我们也需要对代码进行一下关联的修改 

 

这是控制器代码: 

  private Model2 db = new Model2();// GET: admin/Articlespublic ActionResult Index(int? page){int pageIndex = page ?? 1;int pageSize = 2; var orderedArticles = db.Articles.OrderBy(a => a.Id).Include(a=>a.Category); // 假设按 Id 升序排序IPagedList<Article> p1 = orderedArticles.ToPagedList(pageIndex, pageSize);return View(p1);}// GET: admin/Articles/Details/5public ActionResult Details(int? id){if (id == null){return new HttpStatusCodeResult(HttpStatusCode.BadRequest);}Article article = db.Articles.Find(id);if (article == null){return HttpNotFound();}return View(article);}// GET: admin/Articles/Createpublic ActionResult Create(){ViewBag.Category_Id = new SelectList(db.Categories,"Id","Name");return View();}[HttpPost][ValidateAntiForgeryToken]public ActionResult Create([Bind(Include = "Id,Title,Content,CategoryName,addDate,Hit,Category_Id")] Article article){if (ModelState.IsValid){article.addDate= DateTime.Now;db.Articles.Add(article);db.SaveChanges();return RedirectToAction("Index");}ViewBag.Category_Id = new SelectList(db.Categories, "Id", "Name",article.Category_Id);return View(article);}// GET: admin/Articles/Edit/5public ActionResult Edit(int? id){if (id == null){return new HttpStatusCodeResult(HttpStatusCode.BadRequest);}Article article = db.Articles.Find(id);if (article == null){return HttpNotFound();}ViewBag.Category_Id = new SelectList(db.Categories, "Id", "Name", article.Category_Id);return View(article);}// POST: admin/Articles/Edit/5// 为了防止“过多发布”攻击,请启用要绑定到的特定属性;有关// 更多详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=317598。[HttpPost][ValidateAntiForgeryToken]public ActionResult Edit([Bind(Include = "Id,Title,Content,CategoryName,addDate,Hit,Category_Id")] Article article){if (ModelState.IsValid){article.addDate = DateTime.Now;db.Entry(article).State = EntityState.Modified;db.SaveChanges();return RedirectToAction("Index");}ViewBag.Category_Id = new SelectList(db.Categories, "Id", "Name", article.Category_Id);return View(article);}// GET: admin/Articles/Delete/5public ActionResult Delete(int? id){if (id == null){return new HttpStatusCodeResult(HttpStatusCode.BadRequest);}Article article = db.Articles.Find(id);if (article == null){return HttpNotFound();}return View(article);}// POST: admin/Articles/Delete/5[HttpPost, ActionName("Delete")][ValidateAntiForgeryToken]public ActionResult DeleteConfirmed(int id){Article article = db.Articles.Find(id);db.Articles.Remove(article);db.SaveChanges();return RedirectToAction("Index");}protected override void Dispose(bool disposing){if (disposing){db.Dispose();}base.Dispose(disposing);}}

 然后这个是列表显示页的视图代码

<p class="p">@Html.ActionLink("创建文章", "Create")
</p>
<table class="table"><tr><th>@*@Html.DisplayNameFor(model => model.Title)*@标题</th><th>@* @Html.DisplayNameFor(model => model.Content)*@内容</th><th>@*@Html.DisplayNameFor(model => model.addDate)*@添加日期</th><th>@* @Html.DisplayNameFor(model => model.Hit)*@浏览量</th><th>@* @Html.DisplayNameFor(model => model.Category_Id)*@分类</th><th></th></tr>@foreach (var item in Model){<tr><td>@Html.DisplayFor(modelItem => item.Title)</td><td class="content-width">@Html.DisplayFor(modelItem => item.Content)</td><td>@Html.DisplayFor(modelItem => item.addDate)</td><td>@Html.DisplayFor(modelItem => item.Hit)</td><td>@Html.DisplayFor(modelItem => item.Category.Name)</td><td>@Html.ActionLink("编辑", "Edit", new { id = item.Id }) |@Html.ActionLink("详情", "Details", new { id = item.Id }) |@Html.ActionLink("删除", "Delete", new { id = item.Id })</td></tr>}</table>
<div class="pager">@Html.PagedListPager(Model, page => Url.Action("Index", new { page }),PagedListRenderOptions.ClassicPlusFirstAndLast)
</div>

这个是创建页的控制器代码 


<h2>新建文章</h2>@using (Html.BeginForm()) 
{@Html.AntiForgeryToken()<div class="form-horizontal"><hr />@Html.ValidationSummary(true, "", new { @class = "text-danger" })<div class="form-group">@Html.Label("文章标题", htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })</div></div><div class="form-group">@Html.Label("文章内容", htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.TextAreaFor(model => model.Content, new { htmlAttributes = new { @class = "form-control" } })@Html.ValidationMessageFor(model => model.Content, "", new { @class = "text-danger" })</div></div><div class="form-group">@Html.Label("分类", htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.DropDownList("Category_Id", String.Empty)@Html.ValidationMessageFor(model => model.Category_Id, "", new { @class = "text-danger" })</div></div><div class="form-group"><div class="col-md-offset-2 col-md-10"><input type="submit" value="保存" class="btn btn-default" /></div></div></div>
}<div>@Html.ActionLink("返回列表", "Index")
</div>

这是编辑页的控制器代码:
 


<h2>文章编辑</h2>@using (Html.BeginForm())
{@Html.AntiForgeryToken()<div class="form-horizontal"><div class="form-group">@Html.Label("标题", htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })</div></div><div class="form-group">@Html.Label("文章内容", htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.TextAreaFor(model => model.Content, new { htmlAttributes = new { @class = "form-control" } })@Html.ValidationMessageFor(model => model.Content, "", new { @class = "text-danger" })</div></div><div class="form-group">@Html.Label("分类", htmlAttributes: new { @class = "control-label col-md-2" })<div class="col-md-10">@Html.DropDownList("Category_Id", String.Empty)@Html.ValidationMessageFor(model => model.Category_Id, "", new { @class = "text-danger" })</div></div><div class="form-group"><div class="col-md-offset-2 col-md-10"><input type="submit" value="保存" class="btn btn-default" /></div></div>
</div>
}<div>@Html.ActionLink("Back to List", "Index")
</div>

然后剩下的两个增删改查就不需要做过多的操作,只需要按视图模型生成即可 


http://www.mrgr.cn/p/28442885

相关文章

鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程

一个.c源文件编译的整个过程如图. 编译过程要经过&#xff1a;源文件 --> 预处理 --> 编译(cc1) --> 汇编器(as) --> 链接器(ld) --> 可执行文件(PE/ELF) GCC GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器套件&#xff09;&#xff0c;官网:…

新火种AI|AI让大家都变“土”了!

作者&#xff1a;一号 编辑&#xff1a;美美 AI不仅要把人变“土”&#xff0c;还要把人变多样。 这个世界&#xff0c;终究是变“土”了。 今年五一假期&#xff0c;一个名为“Remini”的AI修图APP火遍了全网。注意&#xff0c;是Remini&#xff0c;而不是Redmi&#xff0…

nacos下载安装和nacos启动报错

nacos简介: Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您…

自动驾驶纵向控制算法

本文来源——b站忠厚老实的老王&#xff0c;链接&#xff1a;忠厚老实的老王投稿视频-忠厚老实的老王视频分享-哔哩哔哩视频 (bilibili.com)&#xff0c;侵删。 功率和转速之间的关系就是&#xff1a;功率P等于转矩M乘以转速ω。并不是油门越大加速度就越大。 发动机和电机的转…

宁波方太集团项目管理办公室负责人王博受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 宁波方太集团项目管理办公室负责人王博先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“系统性建设卓越的组织级项目管理体系”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

C# WinForm —— 12 ListBox绑定数据

ListBox加载大量数据时&#xff0c;避免窗体闪烁的方法&#xff1a; 在加载语句的前后分别加上 BeginUpdate()方法 和 EndUpdate()方法 指定一个集合为绑定的数据源 1. 首先&#xff0c;右键项目&#xff0c;添加类 2. 在新建的类文件中添加属性值信息 3. 构建初始化的对象…

【华为】IPSec VPN手动配置

【华为】IPSec VPN手动配置 拓扑配置ISP - 2AR1NAT - Easy IPIPSec VPN AR3NATIPsec VPN PC检验 配置文档AR1AR2 拓扑 配置 配置步骤 1、配置IP地址&#xff0c;ISP 路由器用 Lo0 模拟互联网 2、漳州和福州两个出口路由器配置默认路由指向ISP路由器 3、进行 IPsec VPN配置&…

【C++】C++11--- 列表初始化|关键字

目录 前言 列表初始化 创建对象时的列表初始化 单参数隐式类型转换 多参数的隐式类型转换 new表达式中使用列表初始化 列表初始化适用于STL 容器 模板类initializer_list 关键字auto 关键字decltype 关键字nullptr 前言 C标准10年磨一剑&#xff0c;第二个真正意义上…

【强训笔记】day16

NO.1 代码实现&#xff1a; class StringFormat { public:string formatString(string A, int n, vector<char> arg, int m) {string ret;int j0;for(int i0;i<n;i){if(A[i]%){if(i1<n&&A[i1]s){retarg[j];i;}else {retA[i];}}else {retA[i];}}while(j&l…

Golang:deepcopy深拷贝工具库

Golang:deepcopy深拷贝工具库 原创 吃个大西瓜 Coding Big Tree 2024-05-02 08:30 云南 听全文Deep copy things译文:事物的深度复制文档github https://github.com/mohae/deepcopy pkg.go https://pkg.go.dev/github.com/mohae/deepcopy安装 go get github.com/mohae/deepco…

SpringCloud微服务之Eureka、Ribbon、Nacos详解

SpringCloud微服务之Eureka、Ribbon、Nacos详解 1、认识微服务1.1、单体架构1.2、分布式架构1.3、微服务1.4、SpringCloud 2、服务拆分与远程调用2.1、服务拆分的原则2.2、服务拆分示例2.2、提供者与消费者 3、Eureka注册中心3.1、Eureka的结构和作用3.2、搭建eureka-server3.2…

Sealos急速部署生产用k8s集群

最近一段时间部署k8s全部使用sealos了&#xff0c;整体使用感觉良好&#xff0c;基本没有什么坑。推荐给大家。 使用 Sealos&#xff0c;可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书&#xff0c;用到我跑路是足够了。不用像之前kubeadm安装…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…

毕业设计:《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》

前言 《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》&#xff0c;这是我在本科阶段的毕业设计&#xff0c;通过引入 Prometheus 和 ELK 架构实现企业对指标与日志的全方位监控。并且基于云原生&#xff0c;使用容器化持续集成部署的开发方式&#xff0c;通过 Sprin…

95、动态规划-编辑距离

递归暴力解法 递归方法的基本思想是考虑最后一个字符的操作&#xff0c;然后根据这些操作递归处理子问题。 递归函数定义&#xff1a;定义一个递归函数 minDistance(i, j)&#xff0c;表示将 word1 的前 i 个字符转换成 word2 的前 j 个字符所需的最小操作数。 递归终止条件…

day1_slidingWindow

一、滑动窗口模板 // 注意&#xff1a;java 代码由 chatGPT&#x1f916; 根据我的 cpp 代码翻译&#xff0c;旨在帮助不同背景的读者理解算法逻辑。 // 本代码不保证正确性&#xff0c;仅供参考。如有疑惑&#xff0c;可以参照我写的 cpp 代码对比查看。import java.util.Has…

C++ 引用

引用函数的形参还有引用传参这一形式 引用:是一个变量的别名,它是某个已经存在的变量的另一个名字。 引用创建后,不可更改 因不可更改,所以必须初始化 必须初始化,所以不可为空(不能被修改) 语法:引用传参语法:函数三种传参模式对比

.Net MAUI 搭建Android 开发环境

一、 安装最新版本 VS 2022 安装时候选择上 .Net MAUI 跨平台开发 二、安装成功后,创建 .Net MAUI 应用 三、使用 VS 自带的 Android SDK 下载 ,Android镜像、编译工具、加速工具 四、使用Vs 自带的 Android Avd 创建虚拟机 五、使用 Android 手机真机调试

基于springboot实现医院药品管理系统项目【项目源码+论文说明】

基于springboot实现医院药品管理系统演示 摘要 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到提升&#xff0c;而读书就…