llk8

MVC开发/常见错误集锦

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.mvc传参

传参数DeptEdit?DeptId=efdc5312-8f32-4605-8329-28565f384b2c

那么在相应Controller有对应方法 public ActionResult DeptEdit(string DeptId),这个DeptId和参数名称得一致

 

2.viewbag和viewdata

其实没啥区别,ViewBag其实本质就是ViewData,只是多了层Dynamic控制。

http://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html

http://www.cnblogs.com/lindaWei/archive/2013/01/15/2860028.html

 

3.Entity Framework中IQueryable, IEnumerable, IList的区别

http://www.cnblogs.com/hiteddy/archive/2011/10/01/Difference_among_IQueryable_IEnumeralb_IList_in_Entity_Framework.html

http://www.cnblogs.com/chengxiaohui/articles/2088837.html

http://weishangxue.blog.163.com/blog/static/21575188201131621956899/

 

IList(IList<T>)会立即在内存里创建持久数据,这就没有实现“延期执行(deferred execution)”

IQeurable(IQuerable<T>)不会立即在内存里创建持久数据,只有遍历它(如通过foreach)、把它转换成List(ToList)等情况下才会向内存加载数据,它可以实现“延期执行”

 一言以蔽之,本地数据源用IEnumerable<T>,并且查询的逻辑可以直接用你所定义的方法的逻辑(因为有上下文),远程数据源用IQueryable<T>,无法直接使用你所定义的方法的逻辑,必须先生成表达式树,查询由源对象处理。

看看例子更明白:

首先是本地数据源:

            List<string> names = new List<string> { "Cai", "Wxied", "Beauty" };

           然后我们看看names的where方法

             VS的智能提示会告诉我们,这个扩展方法有2个重载,必须传入Func<T>,返回IEnumerable<T>。

           再让我们来看看一个远程数据源:

            DataClasses1DataContext dataContext = new DataClasses1DataContext();

            dataContext.Customers.Where这个方法有4个重载。必须传入Expression<Func<T>>,返回IQueryable<T>。

http://www.cnblogs.com/chengxiaohui/articles/2088837.html

 IQueryable接口与IEnumberable接口的区别:  IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。

4.两个问号??

C#中两个问号的作用是判断??左边的对象是否为null,如果不为null则使用??左边的对象,如果为null则使用??右边的对象。

比如:a = b ?? c,如果b为null,则a = c,如果b不为null,则a = b。

 

5.post和get

http://zhidao.baidu.com/link?url=JOJRQTMWlHlCbZlqyUZnJCnAiL7R1o1fImESNJg4_5-8rvbmMstMMCb2nPqQo8yfbKJIRVW0Lgbqrqw93VtJP_

 

6.ValidateAntiForgeryToken

禁止跨站攻击

 

7.Bundle捆绑压缩技术

Script文件引用:@Scripts.Render(virtualPath[,virtualPath1][,virtualPath2][,...])
CSS文件引用: @Styles.Render(virtualPath[,virtualPath1][,virtualPath2][,...])

 bundles.Add(new ScriptBundle("~/ad/Scripts/shared_standardnav.js").Include("~/Areas/Admin/Scripts/shared_standardnav.min.js"));

前面为虚地址,后面为包含的文件,可以多个。

 

http://www.cnblogs.com/zxktxj/archive/2013/06/04/3116352.html

 

8.C#扩展方法

http://blog.csdn.net/todototry/article/details/5155907

定义的时候需要用this,this是它和一般的方法的区别符。如下,这样只要引用此命名空间,所有string属性的值都拥有了以下扩展的方法了

public static string ToL1(this string kstr) 
{}

 

9.string format

public static string USER_ALL_MODULE = "qm_cache_all_module_{0}";

string key = string.Format(QM.Common.SysConst.USER_ALL_MODULE, UserId);

 

10.高内聚、低耦合

一个类之间各种属性方法之间高度聚集,低耦合就是和每个类有尽量少的重复性的东西。

posted on 2014-01-08 11:39  llk8  阅读(204)  评论(0编辑  收藏  举报