ASP.net MVC框架提供了大量的HTML渲染的方法和控件,但是使用起来有诸多的不便。对于有经验的设计者使用HTML helpers可以构建一个简单的用户界面,然后加上一些HTML和css就能构建出非常漂亮的界面。但是,对开发人员来说使用一些第三方的控件,界面可能更加方便,开发效率会更高,也使开发人员不用花大量的时间在UI界面上。

这篇文章将介绍两个非常有用的,可以在Asp.net mvc 2中使用的第三方的控件:MvcContrib Grid和SlickUpload。文章将以例子的形式进行说明。

MvcContrib Grid

Gird在现在的应用系统中随处可见。MvcContrib Grid是一个开源的控件,可以构建很整洁的HTML的表格。一般在Asp.net mvc开发中,你可以使用下面代码产生一个表格。

<table>
<tr>
<th>Username</th>
<th>First name</th>
<th>Last name</th>
<th>Email</th>
<th>&nbsp;</th>
</tr>
<% foreach (var profile in Model) { %>
<tr>
<td>
<%= Html.Encode(profile.Username) %>
</td>
<td>
<%= Html.Encode(profile.FirstName) %>
</td>
<td>
<%= Html.Encode(profile.LastName) %>
</td>
<td>
<%= Html.Encode(profile.Email) %>
</td>
<td>
<%= Html.ActionLink("View", "Show",
new{username = profile.Username}) %>
</td>
</tr>
<% } %>
</table>

从上面的代码可以看出,写MVC的View和写Asp代码一样,一行一行的输出,非常的麻烦。使用MvcContrib Grid,只需一行代码,如下:

<%= Html.Grid(Model).AutoGenerateColumns() %>

这行代码将会把实体类所以的属性列出来。但是有些字段是不需要显示的,我们可以通过下面代码来指定输出列以及输出地格式:

    <h2>产品列表</h2><%= Html.Grid(Model).Columns(column => {column.For(x => x.ProductID).Named("Product ID");
column.For(x => x.ProductName);
column.For(x => x.QuantityPerUnit);
column.For(x => x.UnitPrice).Format("{0:N2}");
column.For(x => Html.ActionLink("View Product", "Detail", new { id = x.ProductID })).DoNotEncode();
}) %>

这个例子的数据库是NorthWind,效果如下图:

显示数据库中所有产品分类的名称:

显示指定分类的所有产品,这块使用了MvcContrib Grid:

显示某个产品的详细信息:

上面的代码就指定输出列。格式化金额字段。更多关于此控件的用法可以查看:http://www.jeremyskinner.co.uk.。

SlickUpload

下面介绍一下在asp.net mvc中使用SlickUpload。SlickUpload,估计很多童鞋都有使用过。它有下面这些好处:

1、ASP.NET中上传文件的时候会把上传的文件全部加载到服务器内存中,而SlickUpload直接把上传文件流写入硬盘或数据库。
2、上传进度条能够实时显示文件上传的进度状态。
3、SlickUpload高度的可自定义性,可以允许我们在上传过程中加入其它的业务逻辑
4、支持web farm和web garden

在asp.net mvc中使用SlickUpload和asp.net中类似。

1、在asp.net mvc2项目中添加Krystalware.SlickUpload引用。

2、配置web.config:

在configuration节点中添加下面配置:

    <configSections><sectionGroup name="slickUpload" type="Krystalware.SlickUpload.Configuration.NameValueConfigurationSectionHandler, Krystalware.SlickUpload"><section name="uploadParser" type="Krystalware.SlickUpload.Configuration.NameValueConfigurationSectionHandler, Krystalware.SlickUpload"/><section name="uploadStreamProvider" type="Krystalware.SlickUpload.Configuration.NameValueConfigurationSectionHandler,Krystalware.SlickUpload"/><section name="statusManager" type="Krystalware.SlickUpload.Configuration.StatusManagerConfigurationSectionHandler,Krystalware.SlickUpload"/></sectionGroup></configSections>
 
    <location path=""><slickUpload><uploadParser handleRequests="true" /><uploadStreamProvider provider="File" location="~/Files/"  existingAction="Overwrite" /></slickUpload><system.web><httpRuntime maxRequestLength="1048576"executionTimeout="300"/></system.web><system.webServer><security><requestFiltering><requestLimits maxAllowedContentLength="2072576000"/></requestFiltering></security></system.webServer></location>

在system.web中添加下面配置

      <httpHandlers><add path="SlickUpload.axd" verb="GET,HEAD,POST,DEBUG" type="Krystalware.SlickUpload.SlickUploadHandler,Krystalware.SlickUpload" /></httpHandlers><httpModules><add name="HttpUploadModule" type="Krystalware.SlickUpload.HttpUploadModule,Krystalware.SlickUpload"/></httpModules>

3、在试图中引入此控件和其命名空间:

<%@ Import Namespace="Krystalware.SlickUpload"%>
<%@ Register Assembly="Krystalware.SlickUpload" Namespace="Krystalware.SlickUpload.Controls" TagPrefix="kw" %>

4、这个例子的控制器代码如下:

public class UploadController : Controller
{public ActionResult Index(){return View();}public ActionResult UploadResult(){UploadStatus status = UploadConnector.GetUploadStatus();return View(status.GetUploadedFiles());}
}

4、使用Html.BeginForm创建一个表单,在此表单上使用此控件,代码如下:

<% using (Html.BeginForm(
"UploadResult",
"Upload",
FormMethod.Post,
new {
id = "uploadForm",
enctype = "multipart/form-data"
})) { %>
<kw:slickupload ID="SlickUpload1" runat="server" UploadFormId="uploadForm" MaxFiles="1" ShowDuringUploadElements="cancelButton" HideDuringUploadElements="uploadButton" >
<DownlevelSelectorTemplate>
<input type="file" />
</DownlevelSelectorTemplate>
<UplevelSelectorTemplate>
<input type="button" value="Add File" />
</UplevelSelectorTemplate>
<FileTemplate>
<kw:FileListRemoveLink ID="FileListRemoveLink1" runat="server">
[x] remove</kw:FileListRemoveLink>
<kw:FileListFileName ID="FileListFileName1" runat="server" />
<kw:FileListValidationMessage ID="FileListValidationMessage1" runat="server" ForeColor="Red" />
</FileTemplate>
<ProgressTemplate>
<table width="99%"><tr><td>
<p>Upload Progress:</p>
<div class="progressBorder">
<kw:UploadProgressBarElement ID="UploadProgressBarElement1" runat="server"
CssClass="progressBar"/>
<div class="progressValue">
<kw:UploadProgressElement ID="UploadProgressElement1" runat="server"
Element="PercentCompleteText">
(calculating)
</kw:UploadProgressElement>
</div>
</div>
</td></tr></table>
</ProgressTemplate>
</kw:slickupload>
<hr />
<p>
<input type="submit" value="Upload"
id="uploadButton" />
</p>
<% } %>

用UploadResult的View显示结果,使用MvcContrib Grid来显示:

   <%= Html.Grid(Model).Columns(column => {column.For(x => x.ClientName);column.For(x => x.ContentType);column.For(x => x.ContentLength);
}) %>

上传页面:

选择上传文件:

上传结果:

总结:这篇文章介绍了两个第三方控件在ASP.net MVC2中的使用。

本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/07/10/1774892.html,如需转载请自行联系原作者

Asp.net MVC2使用第三方控件相关推荐

  1. 学习笔记---母板页、用户控件、第三方控件及视图状态管理

    一.母版页 在制作页面的过程中, 多个页面往往具有相同的页面Header和页面Footer, 多个页面只是在中间部分有变化. 那么我们完全可以避免在每个页面中都写一遍页头和页尾的代码, 这种技术就是母 ...

  2. 给DataList分页有两个办法:1、自定义实现分页方法 2、用第三方控件(例如AspNetPager)

    给DataList分页有两个办法:1.自定义实现分页方法 2.用第三方控件(例如AspNetPager) 先介绍下如何自定义实现分页方法. 我的DataList分页方法的核心原理是利用PagedDat ...

  3. 第三方控件验证码的使用

    一:界面 二:代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Logi ...

  4. WPF第三方控件盘点

    WPF统一的编程模型.语言和框架,实现了界面设计人员和开发人员工作可以分离的境界,鉴于WPF强大的优势,且一直是开发者关注的地方,下面和大家分享基于WPF项目开发需要用到的第三方控件,包括业界最受好评 ...

  5. ASP.NET中 Calendar(日期控件)的使用

    ylbtech-ASP.NET-Control-Basic:Calendar(日期控件)的使用 ASP.NET中 Calendar(日期控件)的使用. 1.A,运行效果返回顶部 Calendar(日期 ...

  6. asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性

    asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性 就是不用 XXX.Visible = false;  // true 因为这样该容器及其子控件会彻底的从页面上消 ...

  7. DELPHI第三方控件及组件大全(安装方法与使用)

    一,DELPHI第三方控件安装方法介绍 1.对于单个控件,Componet–>install component..–>PAS或DCU文件–>install; 2.对于带*.dpk文 ...

  8. 怎么在ASP.NET中写HTML,如何:在 ASP.NET 网页中设置控件的 HTML 属性

    如何:在 ASP.NET 网页中设置控件的 HTML 属性 10/22/2014 本文内容 更新:2007 年 11 月 这些示例显示如何向页面中的元素添加 HTML 属性.第一个示例演示如何以声明方 ...

  9. 探讨ASP.NET2.0的Web控件改进之概述

    作者: 朱先忠编译 一. 引言 到目前为止,你可能已经了解了大量的ASP.NET 2.0新特征-母版页面,主题,提供者,等等--所有这样内容都相当精彩:但是,你是否了解到有关定制Web控件开发方面的重 ...

最新文章

  1. 华为程序员发现孩子不是自己的!怒提离婚!但老婆只要房子车子!不要孩子!绿他的竟然是个酒吧混混!...
  2. 例说DNS递归/迭代名称解析原理
  3. python与c语言在语法上的区别-论c++/java/c 与python的语法上的区别
  4. 200G vs 400G:谁是数据中心网络下一站?
  5. (转载)C#:Enum、Int和String的互相转换,枚举转换
  6. jquery中siblings方法配合什么方法一起使用
  7. JSON | JSON字符串和JSON对象的区别
  8. android实现qq修改密码底部弹出框_易查分强大的“可修改列”功能:轻松实现填表、留言和信息核对...
  9. 网关冗余工作原理(总结)
  10. golang切片类型
  11. python thrift 示例
  12. TFS无法连接:TF31002
  13. python 小说分析_Python文章相关性分析---金庸武侠小说分析
  14. jquery 的模块化
  15. 解决linux系统Error starting userland proxy: listen tcp 0.0.0.0:xxx端口: bind: address already in use端口占用问题
  16. java 通过 ip地址 找到 打印机_有没有办法使用java套接字程序找到打印机状态?...
  17. ubuntu 安装java运行环境,Ubuntu 安装java环境搭建
  18. 第五人格服务器维护中请稍后登录,第五人格:国际服维护重大故障,刚开精华二,却登录不了游戏...
  19. IT行业HR人事面试题
  20. 一种Flutter上传图片到阿里OSS的方式

热门文章

  1. java持久层用文件_JAVA中用三种方法将字符串持久化到文件中
  2. 第 0001 天:聊聊成长型思维模式者
  3. oracle巡检项,Oracle数据库巡检参考项
  4. java强制gc_java应用性能调优之详解System的gc垃圾回收方法
  5. python好用 appium fiddler_python3 爬虫实战:mitmproxy 对接 python 下载抖音小视频
  6. python读取txt文件存储数组_python – 从文本文件中将数据读入numpy数组
  7. linux i查看o性能度量,在linux系统中I/O 调度的选择
  8. flutter json转对象_在 Flutter 使用 Redux 来共享状态和管理单一数据
  9. java ide排名_Java程序员的困惑,Java IDE到底怎么选
  10. Lesson 2 Gradient Desent