1)Controller向View传递数据
ViewData["message"] = "Hello";//使用ViewData传递数据
ViewBag.Time = DateTime.Now;//ViewBag传递数据
TempData["mes"] = "text";//使用TempData传递数据
//使用静态字段定义变量
public static string str;//全局的
str = "123";
//使用静态集合定义变量
public static List<string> list = new List<string>();//全局的,必须new出来一个对象或者new List<string>();写在方法里面,否则会出现“未将对象引用设置到对象的实例”的错误
list.RemoveRange(0,list.Count);//添加前先清除集合所有元素
list.AddRange(new string[] { "aaa", "bbb", "ccc" });
使用Model传递数据:
使用Model传递数据的时候,通常在创建View的时候我们会选择创建强类型View
View访问Controller数据:
<h1>@ViewData["message"]</h1>
<h2>@ViewBag.Time</h2>
<h3>@TempData["mes"]</h3>
@using MVCStart.Controllers //调用静态字段时,需要引用该方法所在的命名空间
<h4>@LoginController.str</h4> //用类名.调用
总结:
1.ViewData与TempData方式是弱类型的方式传递数据,而使用Model传递数据是强类型的方式。
2.ViewData与TempData是完全不同的数据类型,ViewData数据类型是ViewDataDictionary类的实例化对象,而TempData的数据类型是TempDataDictionary类的实例化对象。
3.TempData实际上保存在Session中,控制器每次执行请求时都会从Session中获取TempData数据并删除该Session。TempData数据只能在控制器中传递一次,其中的每个元素也只能被访问一次,访问之后会被自动删除。
4.ViewData只能在一个Action方法中进行设置,在相关的视图页面读取,只对当前视图有效。理论上,TempData应该可以在一个Action中设置,多个页面读取。但是,实际上TempData中的元素被访问一次以后就会被删除。
5.使用静态集合定义全局变量时,new出来的对象不要写在方法外面,应写在方法里面,否则每次在View获取到的集合数据会累加一次;
2)View向Controller传递数据
通过表单form传递数据,此为post请求获取
定义标签name属性:
<input type="text" name="txtname" />
1.通过Request.Form[""]获取View数据
string username = Request.Form["txtname"];
2.通过public ActionResult Login(FormCollection form)获取View数据
string username = form["username"];
3.get请求获取
string username = Request.QueryString["username"];
4.通过Action参数获取
public ActionResult Login(string username, string password)
通过EF访问例子:
获取数据
public class HomeController : Controller { syEntities db = new syEntities(); public ActionResult Index() { //List<UserInfo> list = db.UserInfo.ToList();//获取数据库所有成员 //List<UserInfo> list = db.UserInfo.Where(s => s.Gender == true).ToList();//获取数据库所有成员并且Gender为true的成员,Lambda方式 List<UserInfo> list = (from s in db.UserInfo where s.Gender == true select s).ToList();//Linq方式获取 return View(list);//返回List集合 } }
@{ Layout = null; } @using MVCText.Models; <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <style type="text/css"> #tbList { border:1px solid #0094ff; width:400px; margin:20px auto; border-collapse:collapse; } #tbList td, #tbList th { border:1px solid #0094ff; padding:2px; } </style> </head> <body> <table id="tbList"> <tr> <th>Id</th> <th>姓名</th> <th>密码</th> <th>姓别</th> <th>操作</th> </tr> <!--视图包含一个 Model属性,可以通过控制器Action方法里的 View(modeldata)赋值 --> @foreach (UserInfo item in Model as List<UserInfo>) { <tr> <td>@item.Id</td> <td>@item.Name</td> <td>@item.Pwd</td> <td>@item.Gender</td> <td> <a href="/Home/Del/@item.Id">删</a> <a href="/Home/Edit/@item.Id">改</a> </td> </tr> } </table> </body> </html>
删除与修改数据:
/// <summary> /// 直接删除 /// </summary> /// <param name="id"></param> /// <returns></returns> public ActionResult Del01(int id) { UserInfo user = new UserInfo() { Id = id }; //第一种方法 //db.UserInfo.Attach(user); //db.UserInfo.Remove(user); //db.SaveChanges(); //第二种方法 syEntities entity = new syEntities(); entity.Entry(user).State = EntityState.Deleted; entity.SaveChanges(); return Redirect("/Home/Index"); } /// <summary> /// 删除后弹出对话框,返回js代码 /// </summary> /// <param name="id"></param> public void Del(int id) { UserInfo user = new UserInfo() { Id = id }; //第一种方法 //db.UserInfo.Attach(user); //db.UserInfo.Remove(user); //db.SaveChanges(); //第二种方法 syEntities entity = new syEntities(); entity.Entry(user).State = EntityState.Deleted; entity.SaveChanges(); //return Redirect("/Home/Index"); Response.Write("<script>alert('删除成功~~!');window.location='/Home/Index';</script>"); //return JavaScript("<script>alert('删除成功~~!');window.location='/Home/Index';</script>"); } [HttpGet] /// <summary> /// 修改 - 显示要修改的数据 /// </summary> /// <param name="id"></param> /// <returns></returns> public ActionResult Edit(int id) { //查询用户指定的ID值 UserInfo user = (from s in db.UserInfo where s.Id == id select s).FirstOrDefault(); //查询所有用户 //List<UserInfo> listPwd = (from c in db.UserInfo where c.Gender == true select c).ToList(); List<UserInfo> listPwd = (from c in db.UserInfo select c).ToList(); ViewBag.classPwd = listPwd;//动态赋值 //3.1.3.2 查询班级数据,并转成 下拉框选项 集合 List<SelectListItem> listClass = db.UserInfo.ToList() .Select(c => new SelectListItem() { Text = c.Age, Value = c.Id.ToString(), Selected = (user.Id == c.Id) }).ToList(); ViewBag.classList = listClass; return View(user);//将获取到的ID值返回 } [HttpPost] public ActionResult Edit(UserInfo model) { syEntities entity = new syEntities(); entity.Entry(model).State = EntityState.Unchanged; //DbEntityEntry entry = db.Entry<UserInfo>(model); //entry.State = EntityState.Unchanged; //entry.Property("Name").IsModified = true; //entry.Property("Age").IsModified = true; db.SaveChanges(); return Redirect("/Home/Index"); //syEntities entity = db.Entry<UserInfo>(model); }
@model MVCText.Models.UserInfo @{ Layout = null; } @using MVCText.Models; <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Edit</title> </head> <body> <form action="/Home/Edit" method="post"> <input type="hidden" name="Id" value="@Model.Id" /> <table> <tr> <td>姓名:</td> <td><input type="text" name="Name" value="@Model.Name" /></td> </tr> <tr> <td>年龄</td> <td> @Html.DropDownList("CID",ViewBag.classList as IEnumerable<SelectListItem>) @*<select name="CID"> @foreach (UserInfo s in ViewBag.classPwd as List<UserInfo>) { if(s.Id == Model.Id) { <option selected value="@s.Id">@s.Age</option> } else { <option value="@s.Id">@s.Age</option> } } </select>*@ </td> </tr> </table> <input type="submit" value="确定" /> </form> </body> </html>