当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪脱离MVC的实体验证      MVC对模型验证提供了良好的支持。脱离了MVC框架又如何实现验证。做一下总结。 1.基于MVC DataAnnotations  http://www.cnblogs.com/hjf1223/archive/2010/11/07/independent-dataannotation-validation.html   2. Fluen.........
    ▪Mvc 3 中的分部视图          说到asp.net MVC,我相信很多开发者都会和我一样,赞扬一番,把我们开发者的开发速度又可以提高,并且可以随意的控制生成的html,这应该是Mvc时代如果到来的话,最可能使它.........
    ▪Windows 8 开发之上下文菜单(右键属性)        在程序中,当右键单击某个对象时,会有小小的弹出菜单命令。如果你使用过Windows 8,你可能已经遇见到过上下文菜单了。经常在一些不可以选择的对象上右键单击,或者在text文本上进.........

[1]脱离MVC的实体验证
    来源:    发布时间: 2013-10-28

MVC对模型验证提供了良好的支持。脱离了MVC框架又如何实现验证。做一下总结。

1.基于MVC DataAnnotations

 http://www.cnblogs.com/hjf1223/archive/2010/11/07/independent-dataannotation-validation.html

 

2. FluentValidation

废话不多说,FluentValidation和Autofac整合

 

首先是Model和Validator

public static IContainer container;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
var builder = new ContainerBuilder();
builder.RegisterType<Customer>();

var typeFinder = new WebAppTypeFinder();
var validators = typeFinder.FindClassesOfType(typeof(IValidator<>)).ToList();
var TValidator = typeof(IValidator<>);
foreach (var validator in validators)
{
if (validator.IsGenericType)
{
continue;
}

//第一种
//var type = validator.BaseType.GetGenericArguments()[0];
//builder.RegisterType(type);
//builder.RegisterType(validator).As(TValidator.MakeGenericType(type)).SingleInstance();

//第二种
builder.RegisterType(validator)
.As(validator.FindInterfaces((type, criteria) =>
{
var isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
return isMatch;
}, typeof(IValidator<>)))
.SingleInstance();
}

container = builder.Build();
}

 

注册IValidator

var builder = new ContainerBuilder();
builder.RegisterType<Customer>();

var typeFinder = new WebAppTypeFinder();
var validators = typeFinder.FindClassesOfType(typeof(IValidator<>)).ToList();
var TValidator = typeof(IValidator<>);
foreach (var validator in validators)
{
if (validator.IsGenericType)
{
continue;
}

//第一种
//var type = validator.BaseType.GetGenericArguments()[0];
//builder.RegisterType(type);
//builder.RegisterType(validator).As(TValidator.MakeGenericType(type)).SingleInstance();

//第二种
builder.RegisterType(validator)
.As(validator.FindInterfaces((type, criteria) =>
{
var isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
return isMatch;
}, typeof(IValidator<>)))
.SingleInstance();
}

container = builder.Build();

 

模型验证

[TestMethod]
public void BaseTest()
{
var customer = new Customer();
var validator = GetValidator<Customer>();
var results = validator.Validate(customer);

bool validationSucceeded = results.IsValid;
Assert.IsFalse(validationSucceeded);

IList<ValidationFailure> failures = results.Errors;
Assert.AreNotEqual(1,failures.LongCount());
}

public IValidator<T> GetValidator<T>()
{
var instance = container.Resolve<IValidator<T>>();
return instance;
}

 

3.其他方式

微软企业库Validation Application Block (初级),

 


参考:

http://www.cnblogs.com/hjf1223/archive/2010/11/07/independent-dataannotation-validation.html

Autofac: http://code.google.com/p/autofac/

fluentvalidation :http://fluentvalidation.codeplex.com/


    
[2]Mvc 3 中的分部视图
    来源:    发布时间: 2013-10-28

    说到asp.net MVC,我相信很多开发者都会和我一样,赞扬一番,把我们开发者的开发速度又可以提高,并且可以随意的控制生成的html,这应该是Mvc时代如果到来的话,最可能使它成功的原因了。但是赞扬归赞扬,既然他是一种开发模式,我们必须要学习,而且要好好学习。

元旦几天假让我放松了一下,今天正式回归正常,开始我的技术之旅。今天探讨一下Mvc中的分部视图。

提到分部视图,我相信大家会想到和web form时代的对应物ascx分部控件,我们在Mvc时代可以更加轻松的控制分部视图。

要说明分部视图,我们先来讨论一下分部视图可以带给我们的优点:

  • 分部视图可以使系统插件化 。我现在非常推崇一个原则,就是可以分离的东西绝对不要让他们在一起,因为只有每个功能模块都是单独的,我们才可以在其他位置重用它。
  • 分部视图还可以带来一个优点,就是分工合作。 现在是一个合作的时代,没有任何一个人可以单独完成规定的任务而不与别人合作,除非是牛人例外。分部视图可以带给我们开发不同模块中的分工合作。
  • 分部视图还有一个在Mvc时代的优点,就是实现简单。我自从学习使用Mvc以后,我基本上就很少写web form的代码了,因为我感觉没有Mvc书写的那么流畅。html.partial(partialName)就可以显示一个分部视图的页面。

  • 简单的叙述了一下优点,既然我们能发现优点存在,那么我们就想在实际项目中更好的使用它,毕竟程序员都追求懒,一段代码,三句可以搞定,绝对不会写三句半,当然最小化原则也是我们代码优化的最终目的。

    那么究竟在Mvc中有哪些可以实现分部视图的功能呢?以及我们要注意点什么呢?

    • Html.Partial(partialName)和html.RenderPartial(partialName) 就是首选。 其实这两个方法我们可以指定任何的.cshtml文件,不一定只是分

      部视图。大家来回忆一下分部视图和视图的区别在哪里?就是视图有head、body标签,可以定义js,可以指定母板页,但是在我们用Vs右键添加

      分部视图的时候,我们会看到只是一些基本的html标签,没有任何的head、body,但是这不等于我们不可以添加,所以说partialName可以是任

      何的视图文件。但是我们最好是创建分部视图,因为我们最终是要把这些分部视图合并成为一个页面,如果只是分部视图的html标签,那么在整

      体页面中html标签就会显得很干净。

      另外,我们不要在分部视图中定义或者引用css以及js。如果需要我们在整体页面中定义或引用。原因有2:1是我们的分部视图文件和整体页面的

      路径可能不在同一个目录下,那么会造成找不到css或js文件的情况。2就是对整体页面的html代码是一种伤害。

    • html.Action和html.RenderAction()方法也可以用来作为分部视图使用

    具体使用方式我想就不需要细说了,大家对htmlHelper都会非常熟悉,因为常用嘛。

    这段时间我在完善仿照博客园的问题,就大量的使用到了分部视图,现在来总结一下,让后来的学习者少走一点弯路。

  • 如果可以,尽量使用母板页,这样可以很好的控制网站的样式。
  • 采用单独的css文件,单独的js文件,尽量不要在分部视图中定义样式,而是在整体页面中。
  • 分部视图的html标签应该尽可能的少,除了要显示的内容之外,不要有任何杂质存在。样式css、js等在整体页面添加。
  • 如果可以,尽量采用html.partial(partialName)或html.RenderPartial(partialName)的方式,而不要用html.Action来作为分部视图的方式,因为这种方法会和控制器交互。
  • 对分部视图的传值尽量采用Model的方式进行,如果一个分部视图需要传递两个参数,那么我建议你分成两个分部视图。
  • 采用分部视图会对整体页面的样式调整带来困难,所以我建议先整体做出页面,然后再分成不同的分部视图。
  • 过多的分部视图会增加服务器的延迟,所以分部视图的控制要得当,我建议控制在10个以内吧,如果服务器允许,更多也是可以的。
  • 要注意分部视图的标签id的命名,最好采用固定的要规则的命名方式,尽量减少冲突的发生,毕竟同名的标签存在会对程序造成隐患。
  • 我相信,每天进步的您,最后一定有一个好的未来。

    本文链接


        
    [3]Windows 8 开发之上下文菜单(右键属性)
        来源:    发布时间: 2013-10-28

      在程序中,当右键单击某个对象时,会有小小的弹出菜单命令。如果你使用过Windows 8,你可能已经遇见到过上下文菜单了。经常在一些不可以选择的对象上右键单击,或者在text文本上进行操作时,会出现上下文菜单。什么时候使用上下文菜单,微软提供了非常详细的指导,下面将介绍如何实现上下文菜单。

    1.确定要显示上下文菜单的位置

      当我们创建弹出菜单时,首先需要确定出被点击element所在的位置,然后将位置传递给弹出菜单控件。下面的方法是确定element的位置:

         privateRect GetPoint(TextBox box)

            {        

          Rect temp = box.GetRectFromCharacterIndex(box.SelectionStart, false);

             GeneralTransform transform = box.TransformToVisual(null);

             Point point = transform.TransformPoint(new Point());

                    point.X = point.X + temp.X;

                    point.Y = point.Y + temp.Y;

           return new Rect(point, new Size(temp.Width, temp.Height));

            }

    2.创建上下文菜单的选项

      1)为TextBox添加上下文菜单事件

        protected override void OnNavigatedTo(NavigationEventArgs e)

            {

                InputBox.ContextMenuOpening += InputBox_ContextMenuOpening;    //InputBox是UI层的TextBox控件

            }    

      2)当离开这个页面时移除上下文菜单事件  

       protected override void OnNavigatedFrom(NavigationEventArgs e)

            {

                InputBox.ContextMenuOpening -= InputBox_ContextMenuOpening;

            }

      3)创建了一个PopupMenu菜单,并添加了一个command,然后调用ShowForSelectionAsync()方法将其显示出来。

       async

        
    最新技术文章:
    ▪C#通过IComparable实现ListT.sort()排序
    ▪C#实现对Json字符串处理实例
    ▪Winform实现抓取web页面内容的方法
    ▪Winform实现将网页生成图片的方法
    ▪C#控制台程序中处理2个关闭事件的代码实例
    ▪WinForm实现同时让两个窗体有激活效果的特效...
    ▪WinForm实现拦截窗体上各个部位的点击特效实...
    ▪用C#的params关键字实现方法形参个数可变示例
    ▪C#判断某程序是否运行的方法
    ▪C#验证码识别基础方法实例分析
    ▪C#通过WIN32 API实现嵌入程序窗体
    ▪C#实现获取鼠标句柄的方法
    ▪C#事件处理和委托event delegate实例简述
    ▪C#获取程序文件相关信息的方法
    ▪C#中的除法运算符与VB.NET中的除法运算符
    ▪ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedLi...
    ▪Base64编码解码原理及C#编程实例
    ▪C#实现的优酷真实视频地址解析功能(2014新算...
    ▪C#和SQL实现的字符串相似度计算代码分享
    ▪C#使用Word中的内置对话框实例
    ▪C#反射之基础应用实例总结
    ▪C#生成单页静态页简单实例
    ▪C#实现SMTP邮件发送程序实例
    ▪C#实现随鼠标移动窗体实例
    ▪C#使用GDI+创建缩略图实例
    ▪C#实现通过模板自动创建Word文档的方法
    ▪C#中Response.Write常见问题汇总
    ▪C#中多态、重载、重写区别分析
    ▪WinFrom中label背景透明的实现方法
    ▪C#中out保留字用法实例分析
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3