• MVC 强类型传值Model。和弱类型传值ViewData[""]。及用EF进行增删查改(母版页的使用)


    <1>

    控制器

    </pre><pre name="code" class="csharp">using MvcTest.Models;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace MvcTest.Controllers
    {
        public class TestController : Controller
        {
    
            salesEntities1 db = new salesEntities1(); //ADO实体模型类
    
    
            //-----以下的Model接收的是一个泛型对象-------//
            public ActionResult Index() 
            {
                var query = from r in db.T_User  // 查询id为2的一条数据 ,尽管仅仅是查询一条数据,可是这个query是一个泛型对象。

    where r.Id==2 select r; ViewData.Model = query; return View(); } //-----以下的Model接收的是一个普通对象-------// public ActionResult Index2() { T_User u = db.T_User.Single(m => m.Id == 2); // 在T_User表(类)中查询id等于2的一条数据(有且仅有一条) u是一个对象 return View(u); } //-----上面两个都是强类型传值。以下的是弱类型传值的使用------// public ActionResult Index3() { T_User u = db.T_User.Single(m => m.Id == 2); ViewData["userinfo"] = u; return View(); } //=========================以上是演示样例强类型与弱类型的传值方式=============================// //-----------------增-----------------// [HttpGet] public ActionResult Add() { return View(); } [HttpPost] public ActionResult Add(T_User u) { db.T_User.Add(u); //加入一条数据 //db.Entry(u).State = System.Data.EntityState.Added; //假设以下的不行,就改成这条试试。(2015-4-26測试的) //db.Entry(u).State = System.Data.Entity.EntityState.Added; //用这就也能够实现加入数据 db.SaveChanges(); return RedirectToAction("List");//加入数据后跳转到List这种方法 } //-----------------删-----------------// public ActionResult Delete(int id) { T_User u = db.T_User.Single(r => r.Id == id); ViewData.Model = u; return View(); } [HttpPost] public ActionResult Delete(T_User u) { //EntityState:是描写叙述实体的状态,它是一个枚举类型;它有5个值 //Deleted:实体将由上下文跟踪并存在于数据库中。可是已被标记为在下次调用 SaveChanges 时从数据库中删除。 //db.Entry(u).State = System.Data.EntityState.Deleted; //假设以下的不行,就改成这条试试。

    (2015-4-26測试的) db.Entry(u).State = System.Data.Entity.EntityState.Deleted; //删除此条数据 db.SaveChanges(); return RedirectToAction("List");// 删除数据后跳转到List这种方法 } //---------------改(更新数据)-----------// [HttpGet] public ActionResult Edit(int id) { T_User u = db.T_User.Single(r => r.Id == id); //编辑数据之前,将要编辑的数据查询出来展示在页面上,以便改动 ViewData.Model = u; return View(); } [HttpPost] public ActionResult Edit(T_User u) { //EntityState是一个枚举类型。它是描写叙述实体的状态。

    //Modified:实体将由上下文跟踪并存在于数据库中,已改动当中的一些或全部属性值 //db.Entry(u).State = System.Data.EntityState.Modified; //假设以下的不行,就改成这条试试。(2015-4-26測试的) db.Entry(u).State = System.Data.Entity.EntityState.Modified; //更新此条数据 //除了上面这样的跟新数据外。还能够採用以下这样的方式来更新数据 //T_User s = db.T_User.Single(r => r.Id == u.Id); //UpdateModel<T_User>(s); //注意假设用要UpdateModel来更新实体类对象数据,那么这个实体类对象一定要来自于db 即:s是从db中查询出来的 db.SaveChanges(); return RedirectToAction("List"); //编辑完后跳转到List这种方法 } //---------------展示数据-----------// public ActionResult List() { var q = db.T_User; //查出T_User这个表(类)的数据。让它展示在页面上 ViewData.Model = q; return View(); } } }





    Index视图   --------控制器中传递的是一个泛型对象

    @model IEnumerable<MvcTest.Models.T_User>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    @foreach (var i in Model)
    {
        <div>@i.Id</div><div>@i.UserName</div><div>@i.Age</div>
    }
    
    

    Index2视图   --------控制器中传递的是一个普通对象

    @model MvcTest.Models.T_User
    
    @{
        ViewBag.Title = "Index2";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    @section UserInfo{ 这个表是一个用户信息表!

    我使用了母版页哦 } <td>@Model.Id</td><td>@Model.UserName</td><td>@Model.Age</td>

    
    

    Index3视图   ---------没有使用强类型传递数据

    @{
        Layout = null;  
    }
    
    @using MvcTest.Models  @*这里是引入T_User类的命名空间*@
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index3</title>
    </head>
    <body>
        <div>
         @{T_User u = ViewData["UserInfo"] as T_User;}
          <table border="1">
              <tr><td>@u.Id</td><td>@u.UserName</td><td>@u.Age</td><td>@Html.ActionLink("编辑", "Edit", new { id=u.Id})</td></tr>
          </table>
                  
        </div>
    </body>
    </html>
    
    

    Index2视图使用的模板页

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>@ViewBag.Title</title>
       
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
     @using (Html.BeginForm())
            {
                @Html.AntiForgeryToken()
         
                //布局页面还有节(Section)的概念。也就是说,假设某个视图模板中定义了一个节(事实上就是在某一块地方占个位置),
                //那么能够把它单独呈现出来为了防止因缺少节而出现异常,能够给RenderSection()提供第2个參数:
                //第一个參数:谁便定义,相当于给这个节取个名字 。
                //第二个參数:指定子页面这个节是否是必需的,假设在这里设为true;可是在子页面没有给这个名称的节的话。编译是通只是的。
                
                
                //如今想在子页面写一段话,来介绍以下这个table的内容信息。            
                <p style="color:red">@RenderSection("UserInfo", true)</p>
         
                <table border="1">                
                   <tr>@*这里面就是呈现子页的主体内容的*@   @RenderBody()</tr>
                </table>                      
                
            }
    </body>
    </html>





    
    

    Add视图 (加入数据)

    @model MvcTest.Models.T_User
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>加入数据</title>
    </head><body>
        @using (Html.BeginForm())
        {
    
            <table>
                <tr><th>username</th><td>@Html.TextBoxFor(m => m.UserName) </td></tr>
                <tr><th>性别</th><td>@Html.TextBoxFor(m => m.Gender)</td></tr>
                <tr><th>年龄</th><td>@Html.TextBoxFor(m => m.Age) </td></tr>
                <tr><th><input type="submit" value="提交" /></th><td></td></tr>
            </table>
        }
    </body>
    </html>
    
    

    Delete 视图 (删除数据)

    @model MvcTest.Models.T_User
    
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>您确定要删除此条数据吗?</title>
    </head>
    <body>
      @using (Html.BeginForm("Delete","Test",FormMethod.Post)) { 
        <table>
            <tr><th>id</th><td>@Html.TextBoxFor(m=>m.Id)</td></tr>
            <tr><th>username</th><td>@Html.TextBoxFor(m => m.UserName)</td></tr>
            <tr><th>性别</th><td>@Html.TextBoxFor(m => m.Gender)</td></tr>
            <tr><th>年龄</th><td>@Html.TextBoxFor(m => m.Age)</td></tr>
            <tr><th><input type="submit" value="删除"/></th></tr>
        </table>
      }
    </body>
    </html>




    Edit 视图 (编辑数据。更新数据)

    @model MvcTest.Models.T_User
    
    @{
        Layout = null;
    }
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>编辑</title>
    </head>
    <body>
        <form action="/Test/Edit" method="post">
            <div>
                <table>
                    <!--(假如我控制器中的action方法接收的是一个User类对象)当把HTML页面的表单数据提交到控制器的action方法中,Mvc中有一个叫ModelBinder的机制,会将依照你提交表单的name属性值与类的属性进入对照。假设类的某个属性与提交过来的表单name属性值一致,那么就将这个表单的value值赋值给类相应的属性。比如:从html页面传过来的表单的name属性值为"UserName" 即name="UserName", 假如控制器的action方法的參数是一个User类对象,又假如正好User类有个属性名也叫"UserName" 那么就将name="UserName"的那个表单的value值赋给User类的UserName属性 -->
                    <!---经过上面的分析 得出:即便我们提交数据不是一个类的对象。可是在控制器中我们仍然能够用类的对象来得到我们提交的数据,前提是类的属性字段要与我们提交的表单name属性值一致(属性值能够忽略大写和小写)。-->
                    @*<tr><th>编号</th><td><input type="text" name="Id" /></td></tr>
                    <tr><th>username</th><td><input type="text" name="UserName" /></td></tr>
                    <tr><th>性别</th><td><input  type="text" name="Gender"/></td></tr>
                    <tr><th>年龄</th><td><input type="text" name="Age" /></td></tr>
                    <tr><td><input type="submit" value="提交" /></td></tr>*@
    
                    <!--也能够写成一下形式-->
    
                    <tr><th>编号</th><td>@Html.TextBoxFor(r=>r.Id)</td></tr>
                    <tr><th>username</th><td>@Html.TextBoxFor(r=>r.UserName)</td></tr>
                    <tr><th>性别</th><td>@Html.TextBoxFor(r=>r.Gender)</td></tr>
                    <tr><th>年龄</th><td>@Html.TextBoxFor(r=>r.Age)</td></tr>
                    <tr><td><input type="submit" value="提交" /></td></tr>
                </table>
            </div>
        </form>
    </body>
    </html>




    List 视图 (展示数据)

    @model IEnumerable<MvcTest.Models.T_User>
    
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>List</title>
    </head>
    <body>
        <p>
            @Html.ActionLink("加入数据", "Add")
        </p>
        <table border="1">   
            <tr><th>username</th><th>年龄</th><th>性别</th><th>操作</th></tr> 
        @foreach (var item in Model) {
            <tr>
                <td>@Html.DisplayFor(modelItem => item.UserName)</td>
                <td>@Html.DisplayFor(modelItem => item.Age)</td>
                <td>@Html.DisplayFor(modelItem => item.Gender)</td>
                <td>
                    @Html.ActionLink("编辑", "Edit", new { id=item.Id }) |
                    @Html.ActionLink("具体", "Details", new { id=item.Id }) |
                    @Html.ActionLink("删除", "Delete", new { id=item.Id })
                </td>
            </tr>
        }    
        </table>
    </body>
    </html>
    
    


  • 相关阅读:
    Jquery 取值,赋值学习总结
    JQuery 常用代码
    Spring Boot JPA
    QueryDSL通用查询框架学习目录
    正确理解MySQL中的where和having的区别
    spring jpa 带参数分页查询(一)
    mysql在表的某一位置增加一列、删除一列、修改列名
    Spring AOP注解配置demo
    java 分页对象以及数据库分页查询
    ztree点击加号+触发ajax请求
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7295593.html
Copyright © 2020-2023  润新知