图片的上传与调用

图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginForm中这样写:@using (Html.BeginForm("ToCreate", "Class",FormMethod.Post, new { enctype = "multipart/form-data" })),用对象的形式将enctype的类型定义成multipart/form-data。这样,后台就可以从缓存中取得file了。看一下后台:

HttpPostedFileBase fc = Request.Files[0];

if (fc != null)

{

newClass.ClassCoverPath =FileHelper.SaveFile(fc);

}

最上面是从Request请求中提取第一个文件,然后放到HttpPostedFileBase类型的fc中,判定fc是否为空,因为有的用户不上传,这个时候就是空的,不执行保存操作,若是不为空,那么将执行FileHelper.SaveFile(fc)。这个方法是一个工具类。代码如下:

string fullname = file.FileName;

string extname = fullname.Substring(fullname.LastIndexOf(".") + 1, fullname.Length - 1 - fullname.LastIndexOf("."));

string newName = DateTime.Now.ToLongTimeString().Replace("/","").Replace(":","").Trim() + "." + extname;

file.SaveAs( Path.GetFullPath("E:/ensleep/Documents/Visual Studio 2012/Projects/AlumniBook/AlumniBook/Upload/")+newName);

return newName;

首先是从file中(fc中)获取文件名,然后将文件名切割,取出其中的扩展名,然后再用DateTime.Now取得当前时间,再调用ToLongTimeString()方法生成长型时间字符串,将其中的“/”、“:”等不合法的字符去掉,然后加上扩展名作为文件的新名字,然后用SaveAS方法将文件流保存至本地的Upload文件夹,最后返回文件的新名称。在控制器收到新名称之后,将新名称给实体,再保存到数据库,下次调用的时候,只需要取出图片名,在前面加上路径,就能直接引用了。

linq实现的数据集多表联合查询

对于linq的数据集查询,花费了不少的时间,虽然结果是很简单的,但是每一个有类似经历的人都会知道,过程竟是那样的漫长与困难。在用户登陆之后,个人中心需要显示用户所在的所有班级,即模型MyClass中的IsMyClass。

public class MyClass

{

public UserInfo MyInfo { get; set; }

public List<Class> IsMyClass { get; set; }

public List<Class> NotMyClass { get; set; }

}

这是一个List类型,是一个数据集合。然后还需要另外一个List集合,就是NotMyClass,他们分别存放用户在的班级和不在的班级。这个问题看似很简单,其实,用户与班级之间是用表关联的,也就是多对多的关系。一个班级可以有多个用户,一个用户也可以有多个班级。若是用sql语句当然好写了,网上的方案有许多,用外联查询就可以了。但是在这里,linq不支持outer join!这样问题就出来了。过程不说了,就说结果吧。先来看如果将IsMyClass查询出来:

var query0 = from uc in db.User_Class

join u1 in db.UserInfo on uc.UserName equals u1.UserName

join c1 in db.Class on uc.ClassName equals c1.ClassName

where u1.UserName == username

select c1;

这是sql中常见的左连接,这个方法linq里面有,我将class、user两张表通过User_Class连接到了一起,然后进行查询,最后取出class。这个还算可以,因为和sql差不多,但是NotMyClass就纠结了,想方设法找了多种方法,也请教了几个正在写书的人,他们都没有调出来,最后推荐使用含集合类型成员的实体,就是可以让Class作为成员,放在User中。即在User中声明一个public List<Class> Class{get;set;}的成员,这个问题在说明书的开始部分有说过,并不稳定,而且系统也会默认建立一张关系表,同学也不建议这样使用。所以,最后想到了一种办法,就是抛弃数据库,直接把集合查到内存里面,然后进行集合操作,也就是说,把所有班级查出来放到NotMyClass中:

mc.IsMyClass = query0.ToList<Class>();

mc.NotMyClass = db.Class.ToList();

foreach(Class rc in mc.IsMyClass)

{

mc.NotMyClass.Remove(rc);

}

然后再将IsMyClass中的实体遍历,从NotMyClass中Remove掉。这虽不是最原始的解决方法,但是,却是一种思想,复杂的数据库查询,放到内存中进行集合处理,这样直观而且不容易出错。

转载请标注原地址:http://www.cnblogs.com/ensleep/tag/%E5%9F%BA%E4%BA%8E.net%20mvc%E7%9A%84%E6%A0%A1%E5%8F%8B%E5%BD%95/

基于.net mvc的校友录(七、文件上传以及多对多关系表的LINQ查询实现)的更多相关文章

  1. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  2. Spring 4 官方文档学习(十一)Web MVC 框架之multipart(文件上传)支持

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-multipart 1.简 ...

  3. 基于HT for Web矢量实现HTML5文件上传进度条

    在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件 ...

  4. Spring MVC使用commons fileupload实现文件上传功能

    通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties&g ...

  5. 自定义MVC框架之工具类-文件上传类

    截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...

  6. 头像文件上传 方法一:from表单 方法二:ajax

    方法一:from表单 html 设置form表单,内包含头像预览div,内包含上传文件input 设置iframe用来调用函数传参路径 <!--表单提交成功后不跳转处理页面,而是将处理数据返回给 ...

  7. 基于.net mvc的校友录(四、系统结构图)

    这是整个系统结构的预览,话不多说,给个图: 本网站努力为每个人提供一个有效的校友录系统,为参与者提供一个简单有效的交流互动的平台,操作上要求简单.高效,性能上要求稳定.可扩展.在对同类网站系统进行了调 ...

  8. 基于.net mvc的校友录(六、codefirst的使用以及班级模块的关键部分实现)

    通过EF将新用户存入数据库 这里,探讨一下如何使用EF的code first将数据存入数据库,以及如何对用户的密码进行md5加密与验证.下面是用户登陆的前台代码. @using (Html.Begin ...

  9. 基于.net mvc的校友录(五、web.config对的配置以及filter实现的权限控制)

    web.config配置文件 此文件是整个系统的配置中心,它告诉iis服务器本网站需要哪些运行时环境,需要哪些环境,将要进行哪些操作,开发人员也会将一个常量性的数据放在此配置中,以备系统全局调用.此文 ...

随机推荐

  1. 解决 FastReport 使用存储过程 找不到临时表问题

    在存储过程最开始加入:以下命令就可以了 SET FMTONLY OFF 有时候在执行SQL查询语句时,仅仅需要知道检索的元数据,而不是具体的数据行,可以设置SET FMTONLY ON. SET FM ...

  2. 判断jquery是否已经加载,如果没有动态加载

    方法一: // Only do anything if jQuery isn't defined if (typeof jQuery == 'undefined') { if (typeof $ == ...

  3. 华为OJ—火车进站(栈,字典排序)

    http://career-oj.huawei.com/exam/ShowSolution?method=SolutionApp&id=2282 给定一个正整数N代表火车数量,0<N&l ...

  4. C++类成员函数的 重载、覆盖和隐藏区别

    重载:成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. #include <iostream> u ...

  5. 实例分析ELF文件静态链接

    参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第4章 静态链接 开发平台: [thm@tanghuimin static_link]$ uname ...

  6. 【译】Spark官方文档——Spark Configuration(Spark配置)

    注重版权,尊重他人劳动 转帖注明原文地址:http://www.cnblogs.com/vincent-hv/p/3316502.html   Spark主要提供三种位置配置系统: 环境变量:用来启动 ...

  7. Python核心编程--学习笔记--8--条件与循环

    本章讲述if.while.for以及与他们搭配的else.elif.break.continue.pass等语句. 1 if语句 语法:三部分——关键字if.条件表达式.代码块.(记住冒号) if c ...

  8. Oracle 错误代码

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

  9. ubuntu14.04字符界面中文乱码及中文输入

    作为ubuntu用户字符界面是绝对不陌生的,尤其是维护管理服务器的朋友为了节省资源都是用的字符界面,但是默认字符界面中文目录文件都是乱码,根本无法打开编辑,那么怎么让字符界面显示中文目录文件,还有在字 ...

  10. Layout Support 获取上下bar的长度

    Layout Support This protocol . You can use layout guides as layout items in the NSLayoutConstraint f ...