ASP.NET MVC轻教程 Step By Step 7——改进Write动作方法
在上一节我们使用强类型视图改进Write视图获得更好的智能感知和代码重构,现在可以进一步的改进动作方法。
Step 1. 数据模型绑定
在Save方法中我们使用Request来获取表单传送的值,其实可以将值作为Save的参数传递过来。
public void Save(string nickname,string content) { messages.Add(new Message { NickName = nickname, Content = content, ReleaseDate = DateTime.Now }); Response.Redirect("/Home/Index"); }
注意参数名称和Write视图生成渲染的HTML的标签的name属性值要一致,由于HTML不区分大小写,所以这里的参数名的大小写也无所谓。ASP.NET MVC会自动把QueryString或Form获取的值以name值和参数名对应的方式传递。
不过更好的做法是把Message类的对象作为参数传递过来。如下代码所示。
public void Save(Message message) { message.ReleaseDate = DateTime.Now;
messages.Add(message); Response.Redirect("/Home/Index"); }
我们可以这样做是因为ASP.NET MVC中有一个Model Binder(数据模型绑定)机制,它会自动将通过QueryString或Form获取的name和值重建成一个模型类对象,并传递给动作方法。这样做的优点依然和强类型视图类似,主要是有智能感知和代码重构时比较方便。
Step 2. 动作方法的特性
Write方法负责显示渲染表单,Save方法负责处理表单传递的数据。这样的做法在ASP和php中都很常见,不过每个不同的表单都有不同名称的动作方法,会显得繁琐不够清晰。最好可以使用一个名字,当然不能直接写成两个Write动作方法,不然就会因为重名发生错误。我们可以给动作方法加上特性来区别两个Write。
[HttpGet] public ActionResult Write() { return View(); } [HttpPost] public void Write(Message message) { message.ReleaseDate = DateTime.Now;
messages.Add(message); Response.Redirect("/Home/Index"); }
把Save方法名改成Write,并在两个Write动作方法前分别加上HttpGet和HttpPost特性。前者指定在有人访问页面的时候显示页面,后者是当表单以Post提交的时候处理请求,这样就不会发生歧义了。
分类:
ASP.NET MVC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端