我要学ASP.NET MVC 3.0(八): MVC 3.0 传递和保存你的Model

本文介绍了ASP.NET MVC框架的基本概念及应用开发流程,包括模型(Model)的定义与使用,控制器(Controller)与视图(View)的设计,以及通过示例演示如何创建、修改、删除和展示数据。

原:http://www.cnblogs.com/lukun/archive/2011/07/29/2120699.html

在 ASP.NET MVC 框架中,模型(Model)是负责核心应用程序或业务逻辑的应用程序部件。 模型对象通常从诸如 SQL Server 之类的永久存储区(如数据库)中访问数据,并对该数据执行业务逻辑。

模型特定于应用程序,因此 ASP.NET MVC 框架对您可以生成的模型对象的种类没有限制。 例如,您可以使用 ADO.NET DataSet 或 DataReader 对象,或者可以使用一组自定义的域对象。 您也可以使用对象类型的组合来处理数据。总之:处理数据的办法是多样的只要您选择适合您的其中一种即可。

模型不是特定的类或接口。 类是模型的一部分,这并不是因为它可以实现某接口或派生自某基类。 而是由于类在 ASP.NET MVC 应用程序中发挥的作用,以及类在应用程序文件夹结构中的存储位置的缘故。 ASP.NET MVC 应用程序中的模型类不直接处理来自浏览器的输入,也不生成到浏览器的 HTML 输出。

定义模型


 

模型对象是实现域逻辑(也称为业务逻辑)的应用程序部件。 域逻辑可处理在数据库与 UI 之间传递的数据。 例如,在库存系统中,模型将跟踪存储区中的物品以及用于确定库存中是否有某个物品的逻辑。 此外,模型将是在物品卖出并从仓库中发货时对数据库进行更新的应用程序部件。 通常,模型还将在数据库中存储和检索模型状态。

集成模型和控制器

通常我们创建Model都是在 ASP.NET MVC 应用程序模板中 Visual Studio 提供的 Models 文件夹中创建。

但是,通常也会将模型类存放在单独的程序集中,比如单独的类库,以便我们可以在不同的应用程序中重复使用这些类。

MVC中Model和View的分离,使应用程序的逻辑元素保持分离,这样就可以轻松地测试应用程序逻辑,而不必通过用户界面测试该逻辑。

创建Model

右击MVC项目中的Model文件夹--> 选择添加-->类

将其命名为Person

添加类代码


复制代码

    public class Person
{
/// <summary>
/// 编号
/// </summary>
public int ID { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
}


复制代码

好了 目前我们一个简单的Model已经添加好了 但是我们还没有使用他,下面我们接着来学习如何使用该Model。

列表页面

创建PersonController

鼠标右击Controller文件夹-->添加控制器

程序默认生成了Index方法,明眼的你一眼就能发现,该方法要返回的View还没有创建,所以我们创建他对应的View

右击该方法---选择添加视图

点击添加后,可以看到,VS已经给我们把PersonList的Razor视图代码都写好了。。。(*^__^*) 嘻嘻愉快。。。

迫不及待了 点击运行。。。哦哦 看不到Person的主页

此时我们可以把Global.asax里面的默认controller改为Person即可。或者做导航。。后面介绍

代码如下


 

            routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Person", action = "Index", id = UrlParameter.Optional } // 参数默认值
);


 

再次运行。。。继续报错。。Model未将对象。。。实例

回头想想 其实是我们没有给View传送数据而已。。

那么我们给他一个模拟数据。这里也可以从数据库读取!!!

Controller代码


复制代码

         /// <summary>
/// 获取数据
/// </summary>
/// <returns>PersonList</returns>
IEnumerable<Person> GetData()
{
IEnumerable<Person> list = new List<Person>
{
new Person() {ID = 1001, Name = "张三", Age = 20},
new Person() {ID = 1002, Name = "李四", Age = 22}
};
return list;
}
//
// GET: /Person/
public ActionResult Index()
{
return View(GetData());
}


复制代码

修改后的View代码


复制代码

@model IEnumerable<MvcApplication.Models.Person>
@{
ViewBag.Title = "人员列表";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
人员列表</h2>
<table>
<tr>
<th>
姓名
</th>
<th>
年龄
</th>
<th>
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@item.Name
</td>
<td>
@item.Age
</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>
<p>
@Html.ActionLink("创建人员", "Create")
</p>


复制代码

运行效果

明细页面

Controller代码


复制代码

        //
// GET: /Person/Details/5
public ActionResult Details(int id)
{
foreach (var person in GetData())
{
if (person.ID.Equals(id))
{
return View(person);
}
}
return View();
}


复制代码


View代码
复制代码

@model MvcApplication.Models.Person
@{
ViewBag.Title = "人员明细";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>人员明细</h2>
<fieldset>
<legend>人员信息</legend>
<div class="display-label">姓名:</div>
<div class="display-field">@Model.Name</div>
<div class="display-label">年龄:</div>
<div class="display-field">@Model.Age</div>
</fieldset>
<p>
@Html.ActionLink("编辑", "Edit", new { id=Model.ID }) |
@Html.ActionLink("返回列表", "Index")
</p>


复制代码

运行效果


创建人员
在PersonController新建Create方法
复制代码

        //
// GET: /Person/Create
public ActionResult Create()
{
return View();
}


复制代码

创建视图

生成的视图代码


复制代码

@model MvcApplication.Models.Person
@{
ViewBag.Title = "创建人员";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
创建人员</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>人员信息</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ID)
@Html.ValidationMessageFor(model => model.ID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
<p>
<input type="submit" value="创建" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("返回列表", "Index")
</div>


复制代码

虽然有了 页面有了初始方法

但是我们还没有写他的数据保存方法。。。

继续在PersonController里面写Create方法不过这次要在方法上面加上[HttpPost]确保该方法只能在界面发送数据的时候执行。


复制代码

        //初始化视图
// GET: /Person/Create
public ActionResult Create()
{
return View();
}
//只用于接受页面发过来的Http请求
// POST: /Person/Create
[HttpPost]
public ActionResult Create(Person person)
{
try
{
//操作数据的代码
return RedirectToAction("Success",person);
}
catch
{
return View();
}
}
/// <summary>
/// 用于显示添加人员成功
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
public string Success(Person person)
{
return "删除用户成功!姓名:"+person.Name;
}


复制代码

因为我们没有和数据库交互,所以跳转到了一个Success的方法,输出成功语句。。

运行效果

点击创建之后

修改人员信息

与新增页面类似我们创建修改的初始页面Edit


复制代码

        //初始页面
// GET: /Person/Edit/5
public ActionResult Edit(int id)
{
return View();
}


复制代码
添加视图

生成的代码


复制代码

@model MvcApplication.Models.Person
@{
ViewBag.Title = "修改人员";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
修改人员</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>人员信息</legend>
@Html.HiddenFor(model => model.ID)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
<p>
<input type="submit" value="保存" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("返回列表", "Index")
</div>


复制代码
添加保存代码,还是继续返回上面的Success方法
复制代码

        //初始页面
// GET: /Person/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//修改方法
// POST: /Person/Edit/5
[HttpPost]
public ActionResult Edit(int id, Person person)
{
try
{
// 数据库操作代码
return RedirectToAction("Success",person);
}
catch
{
return View();
}
}


复制代码


运行效果


点击保存后

删除人员

在PersonController中添加方法


复制代码

 //
// GET: /Person/Delete/5
public ActionResult Delete(int id)
{
return View();
}


复制代码

添加删除视图

生成的视图代码


复制代码

@model MvcApplication.Models.Person
@{
ViewBag.Title = "删除人员";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
删除人员</h2>
<h3>
你确定要删除该人员?</h3>
<fieldset>
<legend>人员信息</legend>
<div class="display-label">
编号</div>
<div class="display-field">@Model.ID</div>
<div class="display-label">
姓名</div>
<div class="display-field">@Model.Name</div>
<div class="display-label">
年龄</div>
<div class="display-field">@Model.Age</div>
</fieldset>
@using (Html.BeginForm())
{
<p>
<input type="submit" value="删除" />
|
@Html.ActionLink("返回列表", "Index")
</p>
}


复制代码

添加删除代码


复制代码

        //
// GET: /Person/Delete/5
public ActionResult Delete(int id)
{
foreach (var person in GetData())
{
if (person.ID.Equals(id))
{
return View(person);
}
}
return View();
}
//
// POST: /Person/Delete/5
[HttpPost]
public string Delete(int id, Person person)
{
return "已删除编号为" + id + "的人员";
}


复制代码

运行效果

点击删除

总结

MVC开发基本步骤

一:添加Model对应的Controller

二:在Controller创建操作Model的方法

三:根据创建的方法添加视图,并选择视图模板等

四:修改VS生成的视图代码,如加CSS样式等操作

五:添加按钮的Post方法,必须以该视图名称命名,参数不能和初始化视图的参数一样。

六:调试代码。


具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)内容概要:本文介绍了一个涵盖多个科研领域的综合性MATLAB仿真资源集合,重点聚焦于光伏发电系统中基于粒子群优化(PSO)算法的最大功率点追踪(MPPT)技术的Simulink仿真实现。文档还列举了多种MPPT方法(如P&O、增量电导法、神经网络、模糊逻辑控制等),并展示了该团队在电力系统、智能优化算法、机器习、路径规划、无人机控制、信号处理等多个方向的技术服务能力与代码实现案例。整体内容以科研仿真为核心,提供大量可复现的Matlab/Simulink模型优化算法应用实例。; 适合人群:具备一定电力电子、自动控制或新能源背景,熟悉MATLAB/Simulink环境,从事科研或工程仿真的研究生、科研人员及技术人员。; 使用场景及目标:①习并实现光伏系统中基于粒子群算法的MPPT控制策略;②掌握多种智能优化算法在电力系统与自动化领域的建模与仿真方法;③获取可用于论文复现、项目开发技术攻关的高质量仿真资源。; 阅读建议:建议结合提供的网盘资料,按照研究方向选取对应模块进行实践,重点关注Simulink模型结构与算法代码逻辑的结合,注重从原理到仿真实现的全过程理解,提升科研建模能力。
热成像人物检测数据集 一、基础信息 数据集名称:热成像人物检测数据集 图片数量: 训练集:424张图片 验证集:121张图片 测试集:61张图片 总计:606张热成像图片 分类类别: - 热成像人物:在热成像图像中的人物实例 - 非热成像人物:在非热成像或普通图像中的人物实例,用于对比分析 标注格式: YOLO格式,包含边界框类别标签,适用于目标检测任务。数据来源于热成像视觉图像,覆盖多种场景条件。 二、适用场景 热成像监控与安防系统开发: 数据集支持目标检测任务,帮助构建能够在低光、夜间或恶劣环境下自动检测定位人物的AI模型,提升监控系统的可靠性实时响应能力。 红外视觉应用研发: 集成至红外摄像头或热成像设备中,实现实时人物检测功能,应用于安防、军事、救援工业检测等领域。 术研究与创新: 支持计算机视觉与热成像技术的交叉研究,助力开发新算法用于人物行为分析或环境适应型检测模型。 教育与培训: 可用于高校或培训机构,作为习热成像人物检测AI模型开发的教资源,提升实践技能。 三、数据集优势 精准标注与多样性: 每张图片均由专业标注员标注,确保边界框定位准确,类别分类清晰。包含热成像非热成像类别,提供对比数据,增强模型的泛化能力鲁棒性。 场景实用性强: 数据覆盖多种环境条件,如不同光照天气,模拟真实世界应用,适用于复杂场景下的人物检测任务。 任务适配性高: YOLO标注格式兼容主流深度习框架(如YOLOv5、YOLOv8等),可直接加载使用,支持快速模型开发评估。 应用价值突出: 专注于热成像人物检测,在安防、监控特殊环境检测中具有重要价值,支持早期预警高效决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值