MVC查看详细数据【四】
一、本篇文章主要讲解点击详细,将主键id的值传递到后端,或者将多个值传递给后台的三种方式,并且通过id的值在数据库中查找到相对应的数据,赋值给viewData视图。
1. 第一种将主键id的值传递给后端的方式。
首先我们来看一下在MVC项目中,RouteConfig.cs文件夹下规定的路由规则。注意红色区域的代码。规定了路由规则是,控制器 / 视图名 / id的值。就是指可以带一个额外的参数。
1 namespace MvcApplication1 2 { 3 public class RouteConfig 4 { 5 public static void RegisterRoutes(RouteCollection routes) 6 { 7 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 8 9 routes.MapRoute( 10 name: "Default", 11 url: "{controller}/{action}/{id}", 12 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 13 ); 14 } 15 } 16 }
1.1 前端代码如下: 以下的href=“/UserInfo/ShowDetail/1” ,当发送给ShowDetail页面的时候,如果ShowDetail方法的参数名为id,那么会自动接收该值。
1 <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 2 <%@ Import Namespace="MvcApplication1.Models" %> 3 <!DOCTYPE html> 4 5 <html> 6 <head runat="server"> 7 <meta name="viewport" content="width=device-width" /> 8 <title>Index</title> 9 </head> 10 <body> 11 <div> 12 <table> 13 <tr><th>ID</th><th>用户名</th><th>密码</th><th>邮箱</th><th>创建日期</th><th>详细</th></tr> 14 <%-- <%=ViewData["userinfolist"] %>--%> 15 <%foreach( var userinfo in (IQueryable<Userinfo>)ViewData["userinfolist"]) {%> 16 <tr> 17 <td><%=userinfo.Id %></td> 18 <td><%=userinfo.username %></td> 19 <td><%=userinfo.password %></td> 20 <td><%=userinfo.Emil %></td> 21 <td><%=userinfo.CreateDate.ToShortDateString() %></td> 22 <td><a href="/UserInfo/ShowDetail/<%=userinfo.Id %>">详细</a></td> 23 </tr> 24 <%} %> 25 </table> 26 </div> 27 </body> 28 </html>
1.2 后端接收的代码很简单,直接使用id便可,这样就是最简单的传递单一参数到后端的方法。
1 public ActionResult ShowDetail(int id) 2 { 3 return Content(id.ToString()); 4 }
2.1 第二种传递参数到后端的方法,并且希望可以传递多个参数的,其实也就是通过get方式传参。
1 <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 2 <%@ Import Namespace="MvcApplication1.Models" %> 3 <!DOCTYPE html> 4 5 <html> 6 <head runat="server"> 7 <meta name="viewport" content="width=device-width" /> 8 <title>Index</title> 9 </head> 10 <body> 11 <div> 12 <table> 13 <tr><th>ID</th><th>用户名</th><th>密码</th><th>邮箱</th><th>创建日期</th><th>详细</th></tr> 14 <%-- <%=ViewData["userinfolist"] %>--%> 15 <%foreach( var userinfo in (IQueryable<Userinfo>)ViewData["userinfolist"]) {%> 16 <tr> 17 <td><%=userinfo.Id %></td> 18 <td><%=userinfo.username %></td> 19 <td><%=userinfo.password %></td> 20 <td><%=userinfo.Emil %></td> 21 <td><%=userinfo.CreateDate.ToShortDateString() %></td> 22 <%--<td><a href="/UserInfo/ShowDetail/<%=userinfo.Id %>">详细</a></td>--%> 23 <td><a href="/UserInfo/ShowDetail/?id=<%=userinfo.Id %>">详细</a></td> 24 </tr> 25 <%} %> 26 </table> 27 </div> 28 </body> 29 </html>
2.2 通过以上方法的时候,因为只有一个值,那么后端方法中如果带有名为id的参数,一样可以接收到该值。并且可以通过request方法获取到前端发来的数据。
2.2.1 get方式传值的第一种后端接收方法。
1 public ActionResult ShowDetail(int id) 2 { 3 return Content(id.ToString()); 4 }
2.2.2 get方式传值的第二种后端接收方法,并且将EF查询的数据传递给视图。
1 public ActionResult ShowDetail() 2 { 3 wangjin2Entities1 db = new wangjin2Entities1(); 4 int id = Convert.ToInt32(Request["id"]); 5 var userinfo = db.Userinfo.Where<Userinfo>(u => u.Id == id).FirstOrDefault(); 6 ViewData["userInfo"] = userinfo; 7 return View(); 8 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构