DisplayTemplates和自定义标注

11-DisplayTemplates的使用

通过配置showfordisply可以让某些字段是否呈现

在Html中可以使用displayformodel来显示某些字段。

显示模板示例

@model DateTime
<div>
    <span>@ViewData.ModelMetadata.DisplayName:</span>
    <span>@Model</span>
</div>Code language: HTML, XML (xml)

12-重写ASP.NET MVC视图引擎实现换主题功能

我们可以重写一个我们自己的视图引擎,这样可以加载不同文件夹下面的视图模板

这样就可以达到更换视图的效果

写一个类型 继承BuildManagerViewEngine

比如ThemeViewEngine

然后构造函数 我们传入一个主题目录的文件夹 这样就可以动态改变视图文件夹了

我们在gloable文件夹里面

通过clear去掉原来的视图引擎,然后注册我们自己的视图引擎

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new ThemeViewEngine("主题文件夹名称", null));Code language: CSS (css)

13-自定义验证标注包括前端和服务器

验证标注借助jquery的验证框架来实现前端验证,后端验证的话,是在C#代码里面去实现。

我们下面以一个勾选框为例子,我们自定义一个checkboxrequired标注,在这个标注中如果选择isRequire为true,那么就是用户不需勾选了才能提交。

这个标注适合一些阅读责任书的地方

添加一个标注类

因为不是用来呈现控件,所以我们只需要继承

public class CheckBoxRequiredAttribute : ValidationAttribute, IClientValidatable

这两个类和接口就可以了

添加一个属性

public bool IsChecked { get; set; }Code language: JavaScript (javascript)

然后我们添加一个服务端验证方法

服务器端验证方法

public override bool IsValid(object value)
{
    if(is)
    return Convert.ToBoolean(value); 
}Code language: PHP (php)

然后再添加客户端方法

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
    ModelClientValidationRule rule = new ModelClientValidationRule
    {
        ValidationType = "ckrequired",
        ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()+"必须选择")
    };
    rule.ValidationParameters.Add("ischecked", this.Checked);
    yield return rule;
}Code language: JavaScript (javascript)

其中ValidationType 是验证的js方法名

然后我们添加一个jquery.validate.custom.js的扩展方法

这个是js的验证方法

$.validator.addMethod("ckrequired", function (value, element, param) {
    return element.checked;
});
$.validator.unobtrusive.adapters.addSingleVal("ckrequired", "ischecked");//这个其实在这里用不到Code language: JavaScript (javascript)
Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注