交代背景:
自学的MVC3(虽然知道现在4都有了,不过比较好的教材是3所以就学了3)
问题1:曾经在网上看到说使用MVC的等级分为三个等级
<1>:使用MVC默认的行(忘了那个词了,“行为”是我自己瞎写的,领会精神吧)
<2>:扩展MVC的行为
<3>:使用自定义替换
那我想知道,大家在实际项目中,如何应用,是不是绝大多数都是使用默认行为呢?
问题2:关于模板辅助器方法(比如 EditorForModel, EditorFor)这些生成的HTML元素貌似不太好定制(就是根据自己的需要随意设置HTML标签属性,至少使用这些辅助器方法生成元素的class 这个属性......)所以问问,是不是不太常用呢? 还有就是EditorForModel个人感觉它有些死板,是否因为这个原因,有人跟我一样不喜欢它呢?
问题3:(跑个题这个是ORM的问题)
目前唯一接触到的ORM就是EF
还没有怎么学习它,要看的东西太多,它先放放吧,所以想直接问问
EF(Code First)
public class EFDbContext:DbContext
{
public DbSet<Product> Prodcuts { get; set; }
}
在通过Prodcuts 属性取得数据的时候,是不是一次把Prodcuts 表中的数据从数据库中都 读出来?在Controller中使用Linq过滤出想要的数据,那么这样是不是就从数据库中读取 了大量“无用”的数据呢?如果是这样,那么有没有办法杜绝?
问题4:
关于MVC的非唐突Ajax(Ajax.BeginForm)
我很想知道大家对它的评价,貌似WebForm中的一些Ajax控件不受欢迎,所以很想知道
MVC中的Ajax大家喜欢用么?还是自己通过JS/JQuery 来自己写呢?(各种看,头大,如 果这个用的一般的话,有点想偷懒不看了)
菜鸟 来取经了,如果问的问题让您见笑请 随意放生大小,笑完了别忘给个完美答案谢谢
首先,学3和学4甚至到最新版的6都没有太大的差距;
1、对于三个等级,大致可以这样分,一般在做项目的话,大部分使用mvc的默认功能+部分自定义扩展来实现一些定制化需求;
2、EditorForModel,确实不容易定制,所以大部分是使用其他的表单元素扩展,而不是直接生成整个的编辑页面;
3、对于三,看你使用怎样的返回类型,默认是不会查询所有的数据的,会自动生成符合你查询需求的sql语句(复杂查询,可能生成的sql语句不够优化)
4、非入侵式JS,Ajax在mvc中是非常重要的,因为不再有ViewState,所以必须很多的js控制。
如下书籍可以看看:《MVC3/4高级编程》《精通MVC3/4》《MVC4/5框架揭秘》
我先来回答问题三吧。
LINQ TO SQL 及Entity Framework 如下的语句
var query = from c in dbContext.Product;
response.write query.count;
var query1= (from c in query
where c.artno.beginwith("a001")).tolist();
这样三句话,第一句其实你在数据库里面是看不到查询语句的执行的。
然后你会看到第二句的执行,类似select count(*) from product这样。
然后你会再看到第三句语句的执行。
机制就是ORM并不是马上执行语句,而是等待需要数据的时候,才去执行的。
比如tolist或是UI绑定,比如绑定到Gridview或是使用了for each item 之类的取数据语句。
我说的可能并不是很清楚,但差不多就是这样的,你可以再去看相关文章了解这方面的知识。
1、这个问题好大,默认指的的是MVC里已经实现了的路由策略、数据控制等,扩展指的是根据自己的一些特殊需求进行扩展,不更改MVC的关键功能,自定义是高手的领域,能完全的揉捏MVC了。
2、这个的定制就在SHARED的EDITORTEMPLATE里放一个模型类型同名的cshtml视图来达到目的。当然,也不一定要同名,因为EDitor支持指定模板名称。这个一般来说用的不多,也算高手范畴吧。
3、使用products是不会返回所有数据的,除非你直接对它进行查询。这个属性只是给你一个查询入口,具体多少数据由你基于这个属性(集合)的linq语句决定。要理解这个,需要你多理解linq的知识。
4、WebForm时很少用,现在也很少用,Html有BeginForm,要用到ajax的时候,也是走jquery的多。
现在不是4都有了.是6都有了.
页面还是尽量都用前端的来实现,后台代码能少就少.尽量前后端分离.
这两个月刚做完一个MVC4的项目,摸着石头过河,提供一点体会。
1、我理解的是你在说Action,如果是指这个的话,假设post提交,我把Action当做是一个中间件的作用,前台提交数据,这里获取并做有效性验证,然后封装下,直接给下一层做业务逻辑处理;重写的话,我在权限控制时候用到了,好像是重写了一个BeforeAction的方法,用户做权限判断,因为一个Action对应一个页面,这样就可以处理全部页面了。
2、模板辅助器,看需要,如果默认的不满足需求,就扩展HtmlHelper
3、EF对数据的读取,是什么时候用,什么时候取,而且由于使用的是Linq,所以在编译后,EF会进行优化处理,网上也有EF处理百万级数据的文章,应该是不会有太大影响。
4、自带的Ajax,还是挺好用的,我都是在 直接处理一个实体对象的表单提交时采用,定义好name属性,Action可以直接用实体来接收,很方便,”貌似WebForm中的一些Ajax控件不受欢迎“,如果你是指webForm的UpdatePanel系列的东西,那么可以告诉你完全不是一个东西。其他的情况,如果Ajax.BeginForm会导致还需要自定义一些其他参数,我会选择 JQuery的Ajax提交,目的是结构单一。
看到一个朋友推荐《MVC4/5框架揭秘》,这个如果要作为 开发过程中的参考,不太合适,这个本书介绍的是MVC框架的实现,内容偏深,个人意见仅供参考。
正如你所说,这两本是比较深入的。所以有《MVC3/4高级编程》《精通MVC3/4》《MVC4/5框架揭秘》,这样的一个顺序。这三个系列刚好能够从浅入深的学习mvc。