posts - 10,comments - 5,trackbacks - 0

  为什么 <%= Html.LabelFor(m => m.UserName) %> 就能直接应用模板中字段属性呢? 我当时那么都想不明白! 又没实例化还有 m 也没声明是什么类型为什么能点出字段信息来! 

大家对ASP.NET MVC 2要求的一个常用特性是,要我们支持强类型的HTML辅助方法,这样的辅助方法使用 lambda 表达式来引用传到视图模板中的模型或视图模型。这可以促成更好的编译时视图检查(可以在编译时发现缺陷,而不是在运行时),还可以促成视图模板中更好的代码intellisense支持。新的强类型HTML辅助方法现在已经内置于ASP.NET MVC 2中了,这些方法使用"Html.HelperNameFor()”的命名规范。例如,Html.TextBoxFor(), Html.CheckBoxFor(), Html.TextAreaFor()等等。它们支持使用lambda表达式来指定元素的名称和id,以及要显示的值。例如,除了上面的Html.TextBox()辅助方法外,使用ASP.NET MVC 2,我们现在还可以使用新的Html.TextBoxFor()辅助方法:


注意上面,我们不再需要指定 “ProductName” 字符串参数,lambda表达式是相当灵活的,除了值以外,我们还可以获取我们模型对象中的属性/字段的名称。因为这些HTML辅助方法是强类型的,编写lambda表达式时我们还可以在Visual Studio中得到完整的intellisense支持:显示的HTML跟前面的后期绑定的HTML辅助方法版本的输出是一样的:
http://www.cnblogs.com/CodingArt/articles/1654256.html
posted @ 2011-08-02 01:34 阿 & 文 阅读(969) 评论(0) 编辑

原因:

如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。

Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件。不执行 Response.End 后面的代码行。

此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法均在内部调用 Response.End。

解决方案 :

要解决此问题,请使用下列方法之一:

? 对于 Response.End,调用 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是 Response.End 以跳过 Application_EndRequest 事件的代码执行。

? 对于 Response.Redirect,请使用重载 Response.Redirect(String url, bool endResponse),该重载对 endResponse 参数传递 false 以取消对 Response.End 的内部调用。例如:

Response.Redirect ("nextpage.aspx", false);

这样就可以解决

posted @ 2011-07-25 09:20 阿 & 文 阅读(75) 评论(1) 编辑
写好的dll 当表与类建立映射后,实现对类的操作自动处理数据库的表; 下载地址:http://u.115.com/file/f53862e538# c#类映射表.rar 我已经写好了直接就可以用啦! 希望有能和我交流的把这个写得更好,更完善, 这个我只写了关于SQL Server数据库的的;
posted @ 2011-05-03 15:17 阿 & 文 阅读(315) 评论(1) 编辑
#include //ReDimArray 函数可以对int char double 进行创建动态数组(保留其原有的值); //记住结束的时候记得释放创建的内存空间! //int 动态数组 保留数组以前的信息 //释放使用 calloc 或者malloc 创建的内存空间的空间 int* ReDimArray(int a[],int n,int j) //n为初始大小 j 为改变后的大小 { int* k=0; k=(int *)malloc(j*sizeof(int)); if(j>n) { for(int nj=0;njn) { for(int nj=0;njn) { for(int nj=0;njposted @ 2011-04-26 22:18 阿 & 文 阅读(81) 评论(0) 编辑
2011年4月24日
c#利用反射+特性实现简单的实体映射数据库操作类实现自动增删改查(一)

///对字段特性的映射类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace Attributes
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
    public class FieldAttribute : Attribute
    {
        private string _Fields;
        /// <summary>
        /// 字段名称
        /// </summary>
        public string Fields
        {
            get { return _Fields; }

        }

        private DbType _Dbtype;
        /// <summary>
        /// 字段类型
        /// </summary>
        public DbType Dbtype
        {
            get { return _Dbtype; }

        }

        private int _ValueLength;
        /// <summary>
        /// 字段值长度
        /// </summary>
        public int ValueLength
        {
            get { return _ValueLength; }

        }

        private bool _PK_Primary;
        /// <summary>
        /// 是否是主键
        /// </summary>
        public bool PK_Primary
        {
            get { return _PK_Primary; }
        }


        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="fields"> 字段名</param>
        /// <param name="types"> 字段类型</param>
        /// <param name="i"> 字段值长度</param>
        public FieldAttribute(string fields, DbType types, int i,bool PK=false)
        {

            _Fields = fields;
            _Dbtype = types;
            _PK_Primary = PK;
            _ValueLength = i;
        }
    }
}

///对表特性的映射类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Attributes
{
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
    public class TableAttribute : Attribute
    {
        private string _TableName;
        /// <summary>
        /// 映射的表名
        /// </summary>
        public string TableName
        {
            get { return _TableName; }
        }
        /// <summary>
        /// 定位函数映射表名;
        /// </summary>
        /// <param name="table"></param>
        public TableAttribute(string table)
        {
            _TableName = table;
        }

    }
}

////公共方法 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
namespace Attributes
{
    /// <summary>
    /// 处理反射的类
    /// </summary>
    /// <typeparam name="T"> 与数据库表建立联系的类</typeparam>
    public class AttributesContext<T>
    {
        /// <summary>
        ///存放AttributesContext 类中所有的当前错误信息
        /// </summary>
        private string ExceptionBug;

        /// <summary>
        /// 读取映射的表名
        /// </summary>
        /// <param name="Info">自定义类型</param>
        /// <returns>放回建立映射表名 没简历表面返回空</returns>
        public string xTable(T Info)
        {

            Type userAttu = Info.GetType();
            try
            {
                TableAttribute tables = (TableAttribute)userAttu.GetCustomAttributes(false)[0];
                //在TableAttribute中我设置的是不容许多个特性所取 【0】
                return tables.TableName;
            }
            catch (ArgumentNullException e)
            {
                ExceptionBug = e.Message;
                return null;
            }
            catch (NotSupportedException e1)
            {
                ExceptionBug = e1.Message;
                return null;
            }

          
        }

        /// <summary>
        /// 放回自定义类与表建立的映射的字段名
        /// </summary>
        /// <param name="Info">与表建立映射联系的类</param>
        /// <returns>表字段的数组Dictionary   FieldAttribute ,Object[]| key 字段名 FieldAttribute ,value需要自己转换;object [2]  其中第一个是字段名称  第2个是字段值 </returns>
        public Dictionary<FieldAttribute, Object[]> xField(T Info)
        {
            Dictionary<FieldAttribute, Object[]> xFields = new Dictionary<FieldAttribute, Object[]>();
          
            Type types = Info.GetType();
            PropertyInfo[] typesPro = types.GetProperties();

            foreach (PropertyInfo pro in typesPro)
            {
                object[] attu = pro.GetCustomAttributes(false);

                object objValue = pro.GetGetMethod().Invoke(Info, null);//取特性描述相应字段的值
                object objFieldName = (Object)pro.Name;//取特性对应类的字段名称
                object[] classInfo = new object[2];//把类中的字段名称与值存放;
               
                classInfo[0] = objFieldName;
                classInfo[1] = objValue;

                foreach (Attribute afield in attu)
               {
                   if (afield is FieldAttribute)
                   {
                       FieldAttribute column = afield as FieldAttribute;//把afield转换成FieldAttribute类型
                       xFields.Add(column, classInfo);//把字段存放到key 把特性描述的字段字存放到value
                   
                   }
                   
               }

            }

            return xFields;
        }

    }
}

////用AttributesContext中的  public Dictionary<FieldAttribute, Object[]> xField(T Info)
我们可以获得字段与特性以及值的Dictionary   当我们知道 Dictionary就可以取出相应的信息让后我们在拼接一下 就可以获得命令语句;

我写得是拼接的字符串下面是列子;

    /// <summary>
    /// 用来拼接操作数据库的字符串
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class Install<T>
    {
        /// <summary>
        /// 拼接查询字符串(只能用在与表建立联系的实体类)
        /// </summary>
        /// <param name="types"> 与表建立映射的自定义类</param>
        /// <returns>查询字符串</returns>
        public string insertDate(T types)
        {
            string cmdtxt = "insert into ";
            string cmdparVar = null;
            Type userAttu = types.GetType();
            TableAttribute  tables = (TableAttribute )userAttu.GetCustomAttributes(false)[0];
            cmdtxt += tables.TableName + "(";
            PropertyInfo[] info = userAttu.GetProperties();

            foreach (PropertyInfo prs in info)
            {
                object[] attu = prs.GetCustomAttributes(false);

                foreach (Attribute abute in attu)
                {
                    if (abute is FieldAttribute)
                    {
                        FieldAttribute midle = abute as FieldAttribute;
                         cmdtxt +=  midle.Fields + ",";
                         object obj = prs.GetGetMethod().Invoke(types,null);
                        if (midle.Dbtype == DbType.Int32)
                            cmdparVar +=  obj + ",";
                        else
                            cmdparVar+="'"+obj +"',";
                      
                    }
                }
               
            }

            cmdparVar = cmdparVar.Substring(0, cmdparVar.Length - 1);
            cmdtxt = cmdtxt.Substring(0, cmdtxt.Length - 1) + ")";

            cmdtxt += "values(" + cmdparVar + ")";
            return cmdtxt;
        }

同理我们可以拼接出其他语句; 这只是思路 我还没优化以及错误处理; 还可以改进 改为参数化查询 在特性中不是有类型 字段长度的嘛!那我们就可以利用参数化列;

下面是我写的自动创建参数化对象

   /// <summary>
        /// 创建存储过程的参数  只用于 (SQL语法)
        /// </summary>
        /// <param name="parName">参数名(与存储过程参数名一样)</param>
        /// <param name="parType">参数的数据类型</param>
        /// <param name="parSize">参数字段长度 int 用0表示长度</param>
        /// <param name="parVal">输入参数的值</param>
        /// <param name="aspect">传入方式</param>
        /// <returns></returns>

        public static SqlParameter CreateProcParameters(string parName, SqlDbType parType, int parSize, object parVal, ParameterDirection aspect = ParameterDirection.Input)
        {
            SqlParameter p = new SqlParameter();
            p.ParameterName = parName;
            p.SqlDbType = parType;
            p.Direction = aspect;
            if (parSize != 0)
                p.Size = parSize;
            p.SqlValue = parVal;
            return p;
        }

循环添加参数到命令中

 public static void AddParametersTocmd(SqlCommand cmd,params SqlParameter[] pList)
        {
            foreach (SqlParameter s in pList)
            {
                cmd.Parameters.Add(s);//添加参数
            }
        }

下次有时候在把完整的实现表与类的映射实现自动化增删改查些出来; 我也才开始学习哪些对象我也只是猜实现 还没进行优化所以等下次我 我在发表;


posted @ 2011-04-24 23:09 阿 & 文 阅读(248) 评论(0) 编辑
2011年4月23日
Ajax
摘要: //所谓Ajax技术实际上就是浏览器的成异步传输技术//声明XMLHttpRequest对象//XMLHttpRequest对象是用来完成异步传输模式的核心对象var xmlHttpfunction createXMLHttpRequest(){var xp;try{//不同的浏览器所创建的XMLHttpRequest对象,和创建方式不尽相同//这里使用异常处理的方式来获得正确的XMLHttpRequest对象创建// Firefox, Opera 8.0+, Safarixp=new XMLHttpRequest();}catch (e){ // Internet Explorer浏览器的X阅读全文
posted @ 2011-04-23 22:18 阿 & 文 阅读(83) 评论(2) 编辑
c语言中实现动态数组!(自己包的,共大家思考)
摘要: #include <malloc.h>//ReDimArray 函数可以对int char double 进行创建动态数组(保留其原有的值);//记住结束的时候记得释放创建的内存空间!//int 动态数组 保留数组以前的信息//释放使用 calloc 或者malloc 创建的内存空间的空间int* ReDimArray(int a[],int n,int j) //n为初始大小 j 为改变后的大小{ int* k=0;k=(int *)malloc(j*sizeof(int)); if(j>n) { for(int nj=0;nj<j;nj++) { if (nj<阅读全文
posted @ 2011-04-23 22:15 阿 & 文 阅读(87) 评论(0) 编辑
c#利用反射+特性实现简单的实体映射数据库操作类(表与类的映射)
摘要: 开始之前首先需要了解 特性Attribute; 说穿了特性也就是一些声明信息;我们在运行的时候可以用反射获取这些声明;所想我们试想下;我们新建一个类用来存放数据库表中的信息; 那我们是不是需要在该类中有专门存放该表字段信息的类的字段呢?(这里说的是存放表中的全部字段信息) 在想想下,描述一个数据库字段需要哪些信息; 二类中字段可以满足哪些信息吗! 所以我们需要对该字段进行描述 ,比如说字段名称呀,字段数据类型呀,字段数据类型长度呀,还有有是否为主键呀? 我也是初学者 我这里只是说最基础的建立特性类;using System;using System.Collections.Generic;us阅读全文
posted @ 2011-04-23 22:09 阿 & 文 阅读(362) 评论(1) 编辑
2011年4月3日
url从写中的图片疑问?
摘要: 我是一个新手! 最近在搞那个url从写! 我最开始用的httpModules 来实验的! 首先 网上下载一个URLRewriter.dll 我用的1.0.2896.30326版本的然后写一个类 在该类中引用 URLRewriter.dll ; 然后写个类继承 URLRewriter.BaseModuleRewriter 重写它的protected override void Rewrite(string requestedPath, System.Web.HttpApplication app)然后就可以在该类中实现相应的重写规则; if (requestedPath.Contains(&qu阅读全文
posted @ 2011-04-03 15:05 阿 & 文 阅读(34) 评论(0) 编辑
URL重写
摘要: 最近在搞那个url重写 在网上有蛮多版本,如果单纯的用用,随便下个dll 差不多久可以用用了! 当时我做了一个东西,在实验实验,结果url从写到是成功了,可是那些图片的路径出问题了!asp.net Url重写 重写后页面图片路径的出问题(服务器控件 地址从根目录下开始找的也出问题!);我 用html 标记<img src="<%=ResolveUrl("~/image/123.jpg")%>" /> 就没问题;用 <asp:Image ID="Image1" runat="server"阅读全文
posted @ 2011-04-03 13:34 阿 & 文 阅读(144) 评论(0) 编辑
仅列出标题