标题:MVC具体删除,编辑怎么实现?
只看楼主
wxm198427
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:561
专家分:25
注 册:2008-6-30
结帖率:52.7%
 问题点数:0 回复次数:7 
MVC具体删除,编辑怎么实现?
在MVC3中,我用 entity data model实现了数据的增加,但是编辑的时候我是这样写的:public ActionResult Edit(string id)
        {
            Movie movie=db.testtable.Find(id)//这里为什么没有这个Find方法呢?就卡在这里了,没有这个方法?
            return View();
        }

        [HttpPost]
        public ActionResult Edit(TestTable newTT)
        {
            ……
            db.SaveChanges();//db实体模型对象
            return View("Index");
        }

为什么没有这个Find方法?我要怎么操作?谢谢
搜索更多相关主题的帖子: 编辑 public return Movie 
2013-04-01 14:55
lantian8134
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:8
帖 子:115
专家分:789
注 册:2013-1-11
得分:0 
TestTable是你自定义的对象吧,如果是这样的话你确认TestTable类中你自己定义过Find方法吗?
一般情况下如果数据库优先的话这种对象是指数据表的一行数据的模型(不包含业务方法的)
2013-04-01 15:26
wxm198427
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:561
专家分:25
注 册:2008-6-30
得分:0 
回复 2楼 lantian8134
应该不用自己定义这个find方法吧,他是包含在Assembly EntityFramework.dll, v4.0.30319这个文件中的系统默认的方法。
2013-04-01 15:38
lantian8134
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:8
帖 子:115
专家分:789
注 册:2013-1-11
得分:0 
不好意思,刚才我可能理解错你的意思了。
一般情况下是这样写的
var movie=db.testtable.SingleOrDefault(x=>x.id==id)
if(movie!=null)
{
    ...
}
注意db.testtable返回的类型是不带Find方法的,他和List<T>这个集合不能划等号的
2013-04-01 15:49
wxm198427
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:561
专家分:25
注 册:2008-6-30
得分:0 
回复 4楼 lantian8134
兄弟:我现在发一个代码块给你瞧瞧:9.2 实现数据的修改视图
接下来,让我们来看一下如何实现一个用来修改数据的视图。
首先打开Movie控制器,追加一个返回数据修改视图的Edit方法与一个对该视图中的表单提交进行处理的Edit方法,代码如下所示。
//
// GET: /Movies/Edit
public ActionResult Edit(int id)
{
        Movie movie = db.Movies.Find(id);
        if (movie == null)
            return RedirectToAction("Index");
 
        return View(movie);
}
//
// POST: /Movies/Edit
[HttpPost]
public ActionResult Edit(Movie model)
{
        try
        {
            var movie = db.Movies.Find(model.ID);
 
            UpdateModel(movie);
            db.SaveChanges();
            return RedirectToAction("Details", new { id = model.ID });
        }
        catch (Exception)
        {
            ModelState.AddModelError("", "修改失败,请查看详细错误信息。");
        }
 
        return View(model);
}
这个代码是在百度文库里面找的一片文章:ASP_NET_MVC3中文版教程绝密.doc,你去百度文库搜索这片文章就知道了,我按照他写的操作,但就是怎么也找不到这个find方法。而且就我这2天的研究发现,那个什么 entity data model这个东西跟entity framework是包含关系。但是……
2013-04-02 16:46
wxm198427
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:561
专家分:25
注 册:2008-6-30
得分:0 
回复 4楼 lantian8134
哥们,你这个方法确实实现了,但是我不好意思问那个(x=>x.id==id)这个什么意思,这个X 是哪里来的,我想我要去好好看一下基础MVC了是吧!
2013-04-02 17:17
lantian8134
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:8
帖 子:115
专家分:789
注 册:2013-1-11
得分:0 
默认情况下db.Movies里面是不可能带find方法的。
写这个教程的人这么写的,无非2种情况
1 没调试或者在瞎写
2 教程中的代码没有给全,利用扩展函数完全可以在Movies中注入一个find方法进去,而作者没有把这个扩展函数代码放在教程里面(只要你喜欢,你也可以为任意类型扩展任意多个方法,相当简单~_~)

下面来说说x=>x.id==id  这个叫lambda表达式。其实就是一个委托,写法有很多,这是最简单的一种
其中x拿你上面的代码来说指的是movies中的某一个对象,意思就是查找某一个对象的id等于你传进来的参数id
lambda和MVC没有半毛钱的关系,它是c#3.0的新增语法,应该是从.net家族中的一门函数式编程语言f#中借鉴来的,这门语言也比较有趣,有兴趣也可以了解一下,扯远了。。。

最后说一下实体框架,它可以说是早期linq2sql的增强版。说白了就是类似hibernate一样是一个ORM框架,好处就是已对象方式进行数据的存储。

你在学MVC建议你先把c#3.0、linq等东东学一下

说了这么多希望对你有帮助
2013-04-02 21:32
wxm198427
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:561
专家分:25
注 册:2008-6-30
得分:0 
回复 7楼 lantian8134
谢谢
2013-04-11 17:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402618-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.150142 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved