Pages: 7/9 First page Previous page 1 2 3 4 5 6 7 8 9 Next page Final page [ View by Articles | List ]
Jul 13
如题:
view层ui需要调用多个model实体时,可以再model层建立一个实体数据集方便前台调用。如下红色字体代码

如下方法可以实现多个同一页面调用多个实体数据集合.
Apr 24
aspnet mvc的错误处理方式主要有以下两种
方式一:通过对controller或者action标记HandleError属性,然后指定一个错误页即可。这种方式最简单,不需要额外增加action ,仅仅需要增加错误页,但是不能记录日志(因为没有action,其实在aspx中也可调用记录日志的方法)。这个错误页还可以定义为强类型,类型为HandleErrorInfo,具体的Model又框架传递,可获取具体的异常信息。
ASP.NET-MVC中错误处理方式 asp.net-mvc asp.net错误日志 asp.net错误处理 mvc
HandlError

/// <summary>
        /// 标记了HandleError,并指明错误处理页为AboutError.aspx
        /// </summary>
        /// <returns></returns>
        [HandleError(View = "AboutError")]
        public ActionResult About()
        {
            return View();
        }

AboutError.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<HandleErrorInfo>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    AboutError
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    通过强类型获取异常信息
    <%= Model.Exception.Message %>
</asp:Content>


这种方式比较灵活,比如需要对某个action定义个错误页,就可采用这种方式。不过会有个小问题,后面会提到。


方式二:重写controller类的onException方式,这种方式最直接了,通常用于一个项目的BaseController中,那么以后的controller都继承这个类即可,可以在cs代码中记录错误日志,但是要定义错误页的action和具体的错误页面。方法中需要设置ExceptionHandled=true,否则错误会被抛到外层,这时候只能通过传统的aspnet错误方式处理了,通常是招CustomerError中配置的错误页,如果没有配置,那就出现一个大黄页了。ExceptionHandled=true这个操作会是逻辑有微妙的变化,后续提到。
重写OnException

protected override void OnException(ExceptionContext filterContext)
        {
            // 标记异常已处理
            filterContext.ExceptionHandled = true;
            // 跳转到错误页
            filterContext.Result = new RedirectResult(Url.Action("Error", "Shared"));
        }


  讲了这两种方式,主要是为了讲这两种方式混用时会出现的问题。如果以action标记了HandleError属性,同时期所在的controller又重写了OnException方法,最终会怎样处理呢?按照mvc中filter的执行顺序,controller重写的方法会被优先执行,不考虑action中的order顺序,执行完毕之后再执行action标记的filter的方法。ok,有了这个理论之后,再看看之前提到的情况的执行顺序。首先执行OnException中的处理方式,这时候filterContext.ExceptionHandled已经被标记为true了,再执行HandleError属性的方法时,就不会在被执行了,也就是说自定义的错误页白费了,不起作用。这是因为内置的HandleError在执行的时候会先判断filterContext.ExceptionHandled是否为true,为true就不执行了,因此会出现一些很奇怪的bug,明白这个道理就知道如何处理了。

       但是总不能把filterContext.ExceptionHandled = true;这行代码去掉,因为其他action没有标记handle error属性,如果不使filterContext.ExceptionHandled为true, 那么错误还是会抛到外层,又交给CustomerError处理了,还是白搭。因此既要保持基类的OnException方法,又要有action自己个性化的错误页,是不能使用系统内置的方式处理,只能自己再去定义ExceptionFilter 了,就是方式三。

方式三,自定义ExceptionFilter,需要继承FilterAttribute,和实现IExceptionFilter接口,实现中不需要判断Exception是否已处理,但要注意需要有AboutError这个action。

自定义ExceptionFilter

    public class AboutErrorAttribute : FilterAttribute, IExceptionFilter
    {
        #region IExceptionFilter 成员

        public void OnException(ExceptionContext filterContext)
        {
            UrlHelper url = new UrlHelper(filterContext.RequestContext);
            filterContext.Result = new RedirectResult(url.Action("AboutError", "AboutError"));
        }

        #endregion
    }


那么action中需要改成
View Code

        /// <summary>
        /// 标记自定义的AboutError
        /// </summary>
        /// <returns></returns>
        [AboutError]
        public ActionResult About()
        {
            return View();
        }


经过一轮折腾,总算实现了需求,即保证了通用异常被正常处理,个别action个性化的错误页面也能实现,还算比较整洁。但最好框架的HandleError能够提供是否忽略判断异常是否已被处理过的属性设置。
Apr 20
ASP.NET MVC程序日志记录工具ELMAH
复制适当版本的Elmah.dll到big目录下
配置web.config,添加如下节点
在站点根目录创建Error文件夹
    一切完成。
    访问异常页
    访问elmah.axd
可以看到异常列表了
Error文件夹下面也有异常文件了

<?xml version="1.0"?>
<configuration>
<configSections>
    <sectionGroup name="elmah">
      <!--添加异常记录配置节点-->
<!-- 提示! ASP.NET1.x把requirePermission="false"去掉 -->
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
    </sectionGroup>
</configSections>

<elmah>
    <security allowRemoteAccess="0" />
    <!--是否允许远程访问。0代表否、1代表是-->
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/Error" />
    <!--记录到文件-->

<errorFilter>
    <test>
      <and>
        <!--过滤400到499的错误 部分url转发可能会引发404错误
        <greater binding="HttpStatusCode" value="399" type="Int32" />
        <lesser binding="HttpStatusCode" value="500" type="Int32" />
        -->
           <equal binding="HttpStatusCode" value="404" type="Int32" />
        <!--过滤404错误-->
      </and>
    </test>
</errorFilter>
</elmah>

    <system.web>
    <httpHandlers>
      <!--配置异常查看-->
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
    </httpHandlers>
    <httpModules>
      <!--配置异常捕获-->
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
    </httpModules>
    </system.web>
  
</configuration>

elmah使用配置还是蛮简单的
有多种数据存储结构进行选择
更多信息可以查看其官方介绍

下面介绍下其它几种日记存储方式

1)把日志记录到SQL Server 2000 or 2005
        <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="此处为connectionString的name" /> 适应ASP.NET2.0
        <errorLog type="Elmah.SqlErrorLog, Elmah" connectionString="Data Source=.;Initial Catalog=ELMAH;Trusted_Connection=True" /> 适应ASP.NET1.x
        
2) 把日志记录到SQLite 适应ASP.NET2.0       1.x不支持        
        <errorLog type="Elmah.SQLiteErrorLog, Elmah" connectionStringName="..." />      
           字符串格式如下:
        <connectionStrings>
          <add name="..." connectionString="data source=data source=C:\Elmah.db或~/App_Data/Error.db" />
        </connectionStrings>
3)把日志记录到XML
        <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="E:\LogHaHa\" />
4)把日志记录到Oracle          
        <errorLog type="Elmah.OracleErrorLog, Elmah" schemaOwner="xxx" />
            connectionStringName="..." />适应ASP.NET2.0

        <errorLog type="Elmah.OracleErrorLog, Elmah" 适应ASP.NET1.x
            schemaOwner="xxx" />
            connectionString="Data Source=xxxx;User ID=username;Password=password" />

5)把日志记录到Access
   <errorLog type="Elmah.AccessErrorLog, Elmah" connectionStringName="..." />适应ASP.NET2.0
        <errorLog type="Elmah.AccessErrorLog, Elmah" 适应ASP.NET1.x
            connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Elmah.mdb" />
  
6)把日志记录到VistaDB      
        <errorLog type="Elmah.VistaDBErrorLog, Elmah"
            connectionStringName="..." />

            字符串格式:
        <connectionStrings>
          <add name="..." connectionString="Data Source='E:\Elmah.vdb3';Open Mode=NonExclusiveReadWrite;Pooling=True" providerName="VistaDB.Provider" />
        </connectionStrings>
            
7)通过电子邮件    
      通过电子邮件发送错误报告。请注意,只有From和To属性是必需的。其余的都是可选的,并可能会被删除。如果服务器不要求身份验证,您必须删除的用户名 和密码属性或设置为空值(导致零长度字符串) 。如果您使用 NET Framework 1.x,那么到属性可能包含多个收件人地址,每个必须划定的分号( ; ) 。如果您使用的是NET Framework 2.0或更高版本,然后到属性可能包含多个收件人地址,每个必须划定逗号( , ) 。
        <errorMail
            from="lcs@dai8.net"
            to="lcs@dai8.net"
            subject="..."
            async="true|false"
            smtpPort="25"
            smtpServer="smtp.dai8.net"
            userName="lcskey"
            password="dai8.net" />
Apr 20
项目有在ASP .NET MVC下作日志并写到数据库里面的的需求,于是在网上搜寻资料,发现解决方法五花八门,把别人的东西放到自己的机器上,发现问题不能解决,搞了将近两天,终于解决了这个问题,在此记录下来 。
在asp.net-mvc下如何做日志 asp.net-mvc如何做系统日志 asp.netc# asp.net-mvc ELMAH
一,首先先解决写到一般文件里的问题:
解决步骤:
1.首先下载个log4net.dll.并放到你的reference中
2.在AssemblyInfo.cs最下面加入一行
   [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)],这里log4net.config是你将要
   放置一些配置的地方。这个文件放在项目的根目录下。内容为:

3.Controller中的代码如此写:

这样你就可以写log到某个file里面了.

二,解决写自定义log到数据库里面的问题
1.首先下载个log4net.dll.并放到你的reference中
Apr 20
ASP.NET MVC2.0项目中用到一个验证码,分享一下……
asp.net-mvc验证码 asp.net-mvc c#验证码

在Controller.cs中,添加Action,用来设置将生成的验证码存入Session,并输出验证码图片:

调用方式为:在需要使用验证码的页面中,加入<img>标签:
<img id="valiCode" style="cursor: pointer;" src="../Account/GetValidateCode" alt="验证码" />
效果如下图:
为实现登录页中,点击图片切换验证码,可以登录页中加入此JS代码实现刷新验证码:
//验证码更换图片  
Apr 11
ASP.NET MVC开发人员必备的五大工具
     1. Chirpy Zippy(下载地址:http://chirpy.codeplex.com/
  过去,在将JavaScript脚本和CSS文件部署到Web服务器之前,我习惯使用压缩工具进行压缩再部署,安装Chirpy后,你的脚本和CSS文件将会基于其名字自动压缩,例如,假设你有一个名叫myscript.js的脚步文件想要压缩,只要你将其重命名为myscript.yui.js,它就会调用YUI压缩程序自动压缩,压缩后的文件在解决方案资源管理器中显示为一个子项目,你可以继续查看和调试未经压缩的脚本。

  使用方法请参考这里

  2. T4MVC(下载地址:http://mvccontrib.codeplex.com/
  我曾经写过许多关于T4MVC的博文,但这里仍然值得一提,它是ASP.NET MVC应用程序的一个T4模板,简化了创建控制器、行为和视图的操作,使MVC代码的可维护性更好。

  3. MVC Contrib(下载地址:http://mvccontrib.codeplex.com/
  T4MVC是MVC Contrib库的一小部分,MVC Contrib库包含了ASP.NET MVC开发领域的各种工具,我在最近的一个私人项目中就使用了Grid HTML Helper,但MVC Contrib包含的功能和库很多,需要你在日常开发中逐一去发现。

  4. ASP.NET精灵和图像优化框架(下载地址:http://aspnet.codeplex.com/releases/view/50869
  提高网站性能最好的办法就是减少渲染一个页面需要的HTTP请求数量,减少请求数的一个方法是使用CSS精灵或内嵌图像。例如,假设你的网站有一个工具条,包含12个32x32像素的图标,加载页面时至少会产生12个HTTP请求,即每个小图标都会产生一个HTTP请求,CSS精灵将所有图标编结在一起,然后使用CSS定义每个图像的边界,这样可以将请求数减少到1个。

  遗憾的是,创建精灵的过程非常耗时和繁琐,基本上需要合并所有图像,然后在样式表中声明每个图像的X和Y坐标,如果合并图像和生成CSS的过程能够自动化就好了,有需求就有对应的产品,ASP.NET精灵和图像优化框架于是就应运而生了。

  5. ELMAH(下载地址:http://code.google.com/p/elmah/
  ELMAH是一款优秀的MVC应用程序日志记录工具,如果你还没有用过它,强烈建议你试一试,虽然需要一翻设置,但其功能的确很强大,这里列一个快速清单以供参考:
    记录几乎所有未处理的异常;
    通过网页远程查看全部日志;
    通过网页远程查看任何单条日志的详细信息;
    即使customErrors模式关闭,大多数时候,你可以查看ASP.NET因异常产生的原始黄色死机屏幕;
    发生错误时会自动发送一封电子邮件通知;
    RSS种子提供最后15个错误日志的信息。
原文出处:http://kb.cnblogs.com/zt/mvc/
Apr 7
Highslide JS
md类无法使用,发现是的问题,客户端脚本在服务端脚本中显示出现的问题
改成恢复正常!
Apr 1
ASP.NET MVC使用model类型传值,让CV沟通更简单!
controllers层得到数据后使用VIEWDATA返回给view层,使用一个中间的MODEL类将所有值放入一个容器然后在返回给view层,这样很方便
EXP:
构建MODEL

controllers层

view层testmvcview.aspx
Pages: 7/9 First page Previous page 1 2 3 4 5 6 7 8 9 Next page Final page [ View by Articles | List ]