MVC初体验-EF系列(状态跟踪的修改)(21)

主要就是在没有AddOrUpdate方法的时候,你想要改变数据库内的一条数据如何操作

核心操作(这里主要展示下如何只改变一个字段“ShipName”的值)

(改变整条记录的值在Attach后面操作db.Entry(order).State = EntityState.Modified;然后savechange即可,但是注意这样操作是将新建的order对象对应的字段全部替换了)

[HttpPost]
        public ActionResult Edit()
        {
            int orderID = int.Parse(HttpContext.Request["orderID"]);
            string shipName = HttpContext.Request["shipname"];
            Orders order = new Orders { OrderID = orderID,ShipName = shipName };
            db.Set<Orders>().Attach(order);
            db.Entry(order).Property("ShipName").IsModified = true;
            db.Entry(order).Property("ShipName").CurrentValue = shipName;
            db.SaveChanges();

            return Redirect("/Orders/Edit/?id="+orderID);
        }

 

后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Entity;
using T1_EF.Models;

namespace T1_EF.Controllers
{
    public class OrdersController : Controller
    {
        DbContext db = new NorthwindEntities();
        // GET: Orders
        public ActionResult Index()
        {
            var list = from order in db.Set<Orders>() select order;
            ViewData.Model = list;
            return View();
        }
        public ActionResult Edit(int id)
        {
            var data = db.Set<Orders>().Where(o=>o.OrderID==id).FirstOrDefault();
            ViewData.Model = data;
            return View();
        }
        [HttpPost]
        public ActionResult Edit()
        {
            int orderID = int.Parse(HttpContext.Request["orderID"]);
            string shipName = HttpContext.Request["shipname"];
            Orders order = new Orders { OrderID = orderID,ShipName = shipName };
            db.Set<Orders>().Attach(order);
            db.Entry(order).Property("ShipName").IsModified = true;
            db.Entry(order).Property("ShipName").CurrentValue = shipName;
            db.SaveChanges();

            return Redirect("/Orders/Edit/?id="+orderID);
        }
    }
}
View Code

前台代码Index.cshtml:

@model IEnumerable<T1_EF.Models.Orders>
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div> 
        <table border="1">
            <tr>
                <td>订单编号</td>
                <td>客户名称</td>
                <td>船舶公司</td>
                <td>船名</td>
                <td>修改</td>
            </tr>
            @foreach (var item in Model)
            {
            <tr>
                <td>@item.OrderID</td>
                <td>@item.Customers.CompanyName</td>
                <td>@item.Shippers.CompanyName</td>
                <td>@item.ShipName</td>
                <td><a href="@Url.Action("Edit","Orders")?id=@item.OrderID">修改</a></td>
            </tr>
            }
        </table>
    </div>
</body>
</html>
View Code

Edit.cshtml:

@model T1_EF.Models.Orders
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Edit</title>
</head>
<body>
    <div> 
        <table border="1">
            <tr>
                <td>@Model.OrderID</td>
                <td>@Model.Customers.CompanyName</td>
                <td>@Model.Shippers.CompanyName</td>
                <td>@Model.ShipName</td>
            </tr>
        </table>
        <form action="@Url.Action("Edit","Orders")" method="post">
            <input type="hidden" name="orderID" value="@Model.OrderID"/>
            <input type="text" name="shipname" placeholder="修改ShipName的值" />
            <input type="submit" name="change" value="修改ShipName" />
        </form>
    </div>
</body>
</html>
View Code

 

 

End

posted @ 2020-02-05 22:27  ZedFFF  阅读(242)  评论(0编辑  收藏  举报