mvc前后台传值,action之间传值
? MVC后台向前台传值
l Viewdata
Viewdata[key] = xj
l Viewbag
Viewbag.key = xj
l model
model传参一次只能传一个
model传参的类型转化更简单一点,
@model 接类型即可
如果model传参想传一个字符串可以这样 return view('index',"参数内容"),如果直接写return view("参数内容"),这个参数内容他会认为是视图的名字,而不是参数的内容!
ltempdata
用法和viewdata类似,TempData["name"] = value。只是他是一个临时变量,一次请求中有效,第二次就失效了
Viewdata,Viewbag其实都是一个键值对,三种传参的方式其实显示几乎都是一样的,字符串,int这些可以直接显示。如果是对象类型做一个转化在显示即可
一个action多钟传参可以一起使用
简单案例:
后台:
public ActionResult Index() { //传一个简单的字符串 ViewData["name"] = "hello razor22222"; List<string> fruits = new List<string>() { "西瓜", "苹果", "桃子", "李子" }; ViewData["fruits"] = fruits; UserInfo userInfo = new UserInfo() { Id = 1, UserName = "诸葛詹", Age = 19, Area = "蜀国" }; ViewData["userInfo"] = userInfo; List<UserInfo> userInfos = new List<UserInfo>() { new UserInfo(){ Id=1, UserName="诸葛亮",Age=27, Area="蜀国" }, new UserInfo(){ Id=2, UserName="诸葛亮",Age=30, Area="蜀国" }, new UserInfo(){ Id=3, UserName="曹操",Age=30, Area="魏国" }, new UserInfo(){ Id=4, UserName="孙权",Age=25, Area="吴国" }, new UserInfo(){ Id=5, UserName="黄月英",Age=20, Area="蜀国" }, new UserInfo(){ Id=6, UserName="黄忠",Age=70, Area="蜀国" }, new UserInfo(){ Id=7, UserName="孙尚香",Age=18, Area="吴国" }, new UserInfo(){ Id=2, UserName="诸诸侠",Age=27, Area="吴国" }, }; ViewData["userInfos"] = userInfos; return View(); }
前台:
<div style="margin-top:20px"> @ViewData["name"] </div> <div style="margin-top:20px"> @{ List<string> friuts = ViewData["fruits"] as List<string>; WebApplication2.Models.UserInfo userInfo = ViewData["userInfo"] as WebApplication2.Models.UserInfo; List<WebApplication2.Models.UserInfo> userInfoList = ViewData["userInfos"] as List<WebApplication2.Models.UserInfo>; } @foreach (var item in friuts) { <div>@item</div> } </div> <div style="margin-top:20px"> <div> 姓名:<span>@userInfo.UserName</span>,年龄:<span>@userInfo.Age</span>,国家:<span>@userInfo.Area</span> </div> </div> <div style="margin-top:20px"> @foreach (var item in userInfoList) { <div> 姓名:<span>@item.UserName</span>,年龄:<span>@item.Age</span>,国家:<span>@item.Area</span> </div> } </div>
? 前台向后台传值
l 表单传值
直接提交表单即可
l 地址栏传值
问号传参
l 路由传值
使用路由配置传递参数
? Action之间传值,页面跳转传值
方法一:路由传值
很简单直接使用 RedirectToAction(string actionName, string controllerName, object routeValues)
这个方法的第三个就是用于传递参数的。
return RedirectToAction("About", new Users() { username = "x", age = 24, address = "j" });
接收:
public ActionResult About(Users user) { return View(); }
传递一个匿名对象也是可以的
return RedirectToAction("About", new { username = "李清照", address = "三国" });
接收:
public ActionResult About(string username, string address) { return View(); }
其实本质也是地址栏传参而已,所以要注意和路由设置冲突问题
方法二:TempData
public ActionResult News() { TempData["name"] = "AJ"; return RedirectToAction("About"); } public ActionResult About() { string name = TempData["name"].ToString(); return View(); }
tempdata是基于session实现的他是一个临时变量,一次请求中有效,第二次就失效了。
当然如果是一次请求中获取多少也是可以的,所以有些说获取一次会就被销毁的说法是错误的