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>

时间: 2024-10-03 03:51:40

MVC 强类型传值Model。和弱类型传值ViewData[&quot;&quot;]。及用EF进行增删查改(母版页的使用)的相关文章

.NET mvc+EF+EasyUI增删查改

链接:https://pan.baidu.com/s/1ZGFieFO-D7_hvtFy5xro5w 提取码:t1yw 复制这段内容后打开百度网盘手机App,操作更方便哦 原文地址:https://www.cnblogs.com/fzqm-lwz/p/10548865.html

动态语言,静态类型,强类型定义语言,弱类型定义语言,

1 动态语言和静态语言 通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言.   1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来.Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言. 2 静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在

asp.net MVC最简单的增删查改!(详)

折腾了两天搞出来,但原理性的东西还不是很懂,废话不多说上图上代码 然后右键models,新建一个数据模型 注意我添加命名为lianxi 添加后如上 接下来在controllers添加控制器还有在Views中添加视图 注意控制器lianxi和视图的名字要一致,然后视图我是添加了3个分别是Index,insert,Modify,在控制器里分别有三个对应的函数 每当用URL访问视图时,他就调用了controllers对应的方法,例如 jiaEntities 就是建立模式时那个数据链接的名字      

6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pattern-and-dep/ 系列目录: Relationship in Entity Framework Using Code First Approach With Fluent API[[使用EF Code-First方式和Fluent API来探讨EF中的关系]] Code First Mig

5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pattern-and-uni/ 系列目录: Relationship in Entity Framework Using Code First Approach With Fluent API[[使用EF Code-First方式和Fluent API来探讨EF中的关系]] Code First Mig

在MVC程序中,使用泛型仓储模式和工作单元实现增删查改

在这片文章中,我将自己动手为所有的实体:写一个泛型仓储类,还有一个工作单元. 工作单元的职责就是:为每一个实体,创建仓储实例.仓储(仓库)的职责:增删查改的功能实现. 我们将会在控制器中,创建工作单元类(UnitOfWork)的实例,然后根据实体,创建仓储实例,再就是使用仓储里面的方法,做操作了. 下面的图中,解释了,仓储和EF 数据上文的关系,在这个图里面,MVC控制器和仓储之间的交互,是通过工作单元来进行的,而不是直接和EF接触. 那么你可能就要问了,为什么要使用工作单元??? 工作单元,就

4.CRUD Operations Using the Repository Pattern in MVC【在MVC中使用仓储模式进行增删查改】

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 上一篇文章,讲到了MVC中基本的增删查改,这篇文章,我会继续说到,使用仓储模式,进行增删查改. 什么是仓储模式呢,我们先来了解一下:  仓储模式是为了在程序的数据访问层和业务逻辑层之间创建一个抽象层,它是一种数据访问模式,提供了一种更松散耦合的数据访问方法.我们把创建数据访问的逻辑代码写在单独的类中,或者类库中

knockout+MVC+webapi+sqlserver完成增删查改

快过年了,公司的事情较少,想着开始学习点新东西.这段时间一个项目用到了mvc和webapi,然后一直对knockout比较感兴趣,就想着用这个框架做一个小实例.数据库采用的是sqlserver.话不多说,开始进行项目的步骤. 第一步:数据库的表创建.创建一个Employees员工表,具体字段见下图: 第二步:创建一个MVC项目,项目模板选择webapi. 第三步:在Model文件夹下新建一个ado.net实体数据模型,选择我们刚刚创建的employees的表,生成实体数据模型. 第四步:在con

Asp.Net Mvc+MongoDB简单增删查改

                                   Asp.Net Mvc+MongoDB简单增删查改 概要:现在很多企业都在使用非关系型的NoSql数据库,其中MongoDB是相当热门的,最近有空就研究了一下,本文写了一套基于Asp.Net Mvc和MongoDB的简单增删查改,本文部分内容是借用其他博文,最后我会贴出出处. 正文: 在控制器的Models中新建一个UserModel模型(其中相当于另开一个类库,类似Dal层) using System; using Syst