zoukankan      html  css  js  c++  java
  • Controller与View之间的数据传递

    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>
  • 相关阅读:
    web基础要点记录
    前端一些干货
    正则表达式手册
    JQuery实现旋转轮播图
    JQuery模拟常见的拖拽验证
    electron应用以管理员权限启动
    原生JS模拟百度搜索关键字与跳转
    关于Application的使用
    Android事件分发机制(相关文章)
    (转)Activity的四种launchMode
  • 原文地址:https://www.cnblogs.com/genesis/p/4813547.html
Copyright © 2011-2022 走看看