C#-MVC-★不同层之间的传值方式★
方式一:form表单提交(一对一传值)
例如:
view层代码:
action - 数据提交到的服务端(如Home控制器下的Insert动作)
method - 提交数据的方式(post或get)
name - 服务端不认id或class等,只认name
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <!DOCTYPE html> <html> <head runat="server"> <meta name="viewport" content="width=device-width" /> <title>Insert</title> </head> <body> <form action="/Hoome/Insert1" method="post"> <h1>添加新用户</h1> <span>用户名:</span><input type="text" name="username" /><br /> <span>密码:</span><input type="text" name="password" /><br /> <span>确认密码:</span><input type="text" name="password1" /><br /> <span>昵称:</span><input type="text" name="nickname" /><br /> <span>性别:</span><input type="text" name="sex" /><br /> <span>生日:</span><input type="text" name="birthday" /><br /> <span>民族:</span><input type="text" name="nation" /><br /> <span>班级:</span><input type="text" name="class" /><br /> <input type="submit" value="添加" /> </form> </body> </html>
控制器下动作代码:
//向数据库添加数据并跳转页面 public ActionResult Insert1(string username, string password, string nickname, string sex, string birthday, string nation, string @class) { Users u = new Users(); u.username = username; u.password = password; u.nickname = nickname; u.sex = Convert.ToBoolean(sex); u.birthday = Convert.ToDateTime(birthday); u.nation = nation; u.@class = @class; using (Data0928DataContext con = new Data0928DataContext()) { con.Users.InsertOnSubmit(u); con.SubmitChanges(); } return RedirectToAction("Main", "Home"); }
方式二:问号传值
view代码:
<tr> <td><%=u.ids %></td> <td><%=u.username %></td> <td><%=u.password %></td> <td><%=u.nickname %></td> <td><%=Convert.ToBoolean(u.sex)?"男":"女" %></td> <td><%=Convert.ToDateTime(u.birthday).ToString("yyyy年MM月dd日") %></td> <td><%=u.Nation1.nationname %></td> <td><%=u.Class1.classname %></td> <td><a href="/Home/Delete?Duname=<%=u.username %>">删除</a></td> </tr>
控制器动作代码
//删除数据并重新定向 public ActionResult Delete() { string UName = Request["Duname"]; using (Data0928DataContext con = new Data0928DataContext()) { Users u = con.Users.Where(r => r.username == UName).FirstOrDefault(); if (u != null) { con.Users.DeleteOnSubmit(u); con.SubmitChanges(); } } return RedirectToAction("Main", "Home"); }
方式三:路由传值 - 只能传一个值,为string类型,默认名为id
格式:/控制器/动作/值
view层代码
<a href="/Home/Update/<%=u.username %>">修改</a>
控制器下动作代码
//查询到数据,用ViewBag带到界面进行绑定 public ActionResult Update(string id) { Users u=null; using (Data0928DataContext con = new Data0928DataContext()) { u = con.Users.Where(r => r.username == id).FirstOrDefault(); } ViewBag.UUser = u; return View(); }
方式四:ViewBag传值 - 从控制器下动作传值到自己的View层,值为任意类型
控制器下动作代码
//查询到数据,用ViewBag带到界面进行绑定 public ActionResult Update(string id) { Users u=null; using (Data0928DataContext con = new Data0928DataContext()) { u = con.Users.Where(r => r.username == id).FirstOrDefault(); } ViewBag.UUser = u; return View(); }
view层进行数据绑定,记得引用命名空间
<body> <% Users u = ViewBag.UUser as Users; %> <form action="/Home/Update1" method="post"> <h1>添加新用户</h1> <span>用户名:</span><input type="text" name="username" readonly="readonly" value="<%=u.username %>" /><br /> <span>密码:</span><input type="text" name="password" value="<%=u.password %>" /><br /> <span>昵称:</span><input type="text" name="nickname" value="<%=u.nickname %>" /><br /> <span>性别:</span><input type="text" name="sex" value="<%=u.sex %>" /><br /> <span>生日:</span><input type="text" name="birthday" value="<%=u.birthday %>" /><br /> <span>民族:</span><input type="text" name="nation" value="<%=u.nation %>" /><br /> <span>班级:</span><input type="text" name="class" value="<%=u.@class %>" /><br /> <input type="submit" value="确认修改" /> </form> </body>
方式五:form表单传值(自动组对象,需要name属性值与字段名完全一致才可以传值)
view层代码
<body> <% Users u = ViewBag.UUser as Users; %> <form action="/Home/Update1" method="post"> <h1>添加新用户</h1> <span>用户名:</span><input type="text" name="username" readonly="readonly" value="<%=u.username %>" /><br /> <span>密码:</span><input type="text" name="password" value="<%=u.password %>" /><br /> <span>昵称:</span><input type="text" name="nickname" value="<%=u.nickname %>" /><br /> <span>性别:</span><input type="text" name="sex" value="<%=u.sex %>" /><br /> <span>生日:</span><input type="text" name="birthday" value="<%=u.birthday %>" /><br /> <span>民族:</span><input type="text" name="nation" value="<%=u.nation %>" /><br /> <span>班级:</span><input type="text" name="class" value="<%=u.@class %>" /><br /> <input type="submit" value="确认修改" /> </form> </body>
控制器下的动作代码
//form表单提交数据,自动组对象,需要name属性值与字段名完全一致 public ActionResult Update1(Users u) { Users uu = u; using (Data0928DataContext con = new Data0928DataContext()) { Users uuu = con.Users.Where(r=>r.username==u.username).FirstOrDefault(); uuu.password = uu.password; uuu.nickname = uu.nickname; uuu.sex = uu.sex; uuu.birthday = uu.birthday; uuu.nation = uu.nation; uuu.@class = uu.@class; con.SubmitChanges(); } return RedirectToAction("Main","Home"); }
方式六:强类型数据 - 将某一个或一组数据在控制器传递到视图上去,同ViewBag,数据更稳定,防止多数据传递中出现错误
return view() 时传值,任意类型
public ActionResult Update(string id) { List<Nation> nlist = null; Users u = null; using (Data0928DataContext con = new Data0928DataContext()) { u = con.Users.Where(r => r.UserName == id).FirstOrDefault(); nlist = con.Nation.ToList(); } ViewBag.xixi = nlist; return View(u); }
view层接收
先进行声明类型 - model小写 不需要加分号
@model Users
调用
value="@Model.UserName"
方式七:TempData - 全局变量,同Sesson,但使用一次后就自动清空
赋值、取值同Session
TempData["LoginIsOk"]="0";