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

/prepre name=code class=csharpusing 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); //UpdateModelT_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 IEnumerableMvcTest.Models.T_User

@{
    ViewBag.Title = Index;
}

h2Index/h2
@foreach (var i in Model)
{
    div@i.Id/divdiv@i.UserName/divdiv@i.Age/div
}

技术分享

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

@model MvcTest.Models.T_User

@{
    ViewBag.Title = Index2;
    Layout = ~/Views/Shared/_Layout.cshtml;
}

@section UserInfo{ 这个表是一个用户信息表!

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


技术分享

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

@{
    Layout = null;  
}

@using MvcTest.Models  @*这里是引入T_User类的命名空间*@
!DOCTYPE html

html
head
    meta name=viewport content=width=device-width /
    titleIndex3/title
/head
body
    div
     @{T_User u = ViewData[UserInfo] as T_User;}
      table border=1
          trtd@u.Id/tdtd@u.UserName/tdtd@u.Age/tdtd@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
/headbody
    @using (Html.BeginForm())
    {

        table
            trthusername/thtd@Html.TextBoxFor(m = m.UserName) /td/tr
            trth性别/thtd@Html.TextBoxFor(m = m.Gender)/td/tr
            trth年龄/thtd@Html.TextBoxFor(m = m.Age) /td/tr
            trthinput type=submit value=提交 //thtd/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
        trthid/thtd@Html.TextBoxFor(m=m.Id)/td/tr
        trthusername/thtd@Html.TextBoxFor(m = m.UserName)/td/tr
        trth性别/thtd@Html.TextBoxFor(m = m.Gender)/td/tr
        trth年龄/thtd@Html.TextBoxFor(m = m.Age)/td/tr
        trthinput 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属性值一致(属性值能够忽略大写和小写)。--
                @*trth编号/thtdinput type=text name=Id //td/tr
                trthusername/thtdinput type=text name=UserName //td/tr
                trth性别/thtdinput  type=text name=Gender//td/tr
                trth年龄/thtdinput type=text name=Age //td/tr
                trtdinput type=submit value=提交 //td/tr*@

                !--也能够写成一下形式--

                trth编号/thtd@Html.TextBoxFor(r=r.Id)/td/tr
                trthusername/thtd@Html.TextBoxFor(r=r.UserName)/td/tr
                trth性别/thtd@Html.TextBoxFor(r=r.Gender)/td/tr
                trth年龄/thtd@Html.TextBoxFor(r=r.Age)/td/tr
                trtdinput type=submit value=提交 //td/tr
            /table
        /div
    /form
/body
/html

技术分享




List 视图 (展示数据)

@model IEnumerableMvcTest.Models.T_User

@{
    Layout = null;
}

!DOCTYPE html

html
head
    meta name=viewport content=width=device-width /
    titleList/title
/head
body
    p
        @Html.ActionLink(加入数据, Add)
    /p
    table border=1   
        trthusername/thth年龄/thth性别/thth操作/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

技术分享



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

原文地址:http://www.cnblogs.com/mthoutai/p/7295593.html


最新回复(0)
/jishuGVV5Zys4FzxbXjqworBkqoVB4SaeEXtjujpGgg_3D_3D4719044
8 简首页