首页 > 编程语言 >带参数的ASP.NET MVC编辑器模板/ UIHint

带参数的ASP.NET MVC编辑器模板/ UIHint

时间:2022-11-19 12:34:31浏览次数:46  
标签:ASP set get DateTime MVC UIHint public 模板

ASP.NET MVC Editor-Templates/UIHint with parameters

过去,我通过应用以下数据注释来像这样一直使用Editor-Templates:

1 [UIHint("SomeTemplate")]

ViewModel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public class MicroViewModel
 {
    public IEnumerable<LabMicro> Micros { get; set; }

    [UIHint("DateTime")]
    public DateTime Date { get; set; }

    public int CaseNo { get; set; }

    [UIHint("SampleTypes")]
    public int LabSampleTypeID { get; set; }

    [UIHint("SampleDetails")]
    public int LabSampleDetailID { get; set; }
 }

如果我想使用 相对于常规日期选择器控件,它可以按以下方式实现。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
@model DateTime?    
@Html.TextBox("",  String.Format("{0:yyyy-MM-dd}", Model.HasValue ?
        Model : DateTime.Today), new { @class ="dp", style="width:100px" })

<script type="text/javascript">    
    $(document).ready(function () {    
        $(".dp").datepicker({    
            changeMonth: true,    
            changeYear: true,
            dateFormat: 'yy-mm-dd'    
        });    
    });

对于我的ID字段,我想使用jQuery 自动完成组件。

问题:

如何将其他参数传递给LabSampleTypeID和LabSampleDetailID的UIHint部分视图? (因为我想拥有一个自动完成的Editor-Template,该模板将使用URL和属性名作为示例)

我认为我的自动完成的Editor-Template / Partial应该如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$(".auto").autocomplete({
    source: function(request, response) {
        $.ajax({
            url: '[#URL_TO_USE]',
            dataType:"json",
            data: {
                filter: request.term
            },
            success: function(data) {
                response($.map(eval(data), function(item) {
                    return {
                        label: item.[#PROPERTY_TO_USE]
                    }
                }));
            }
        })
    }
});
 相关讨论  

 

  • 仅供参考,您不需要UIHint作为DateTime。 它已经是一个DateTime,因此如果存在,它将已经使用DateTime.cshtml模板。 对于与模板名称类型不同的其他类型,您确实需要它。

 

 

 

 


您可以使用AdditionalMetadata属性:

1
2
3
[UIHint("DateTime")]
[AdditionalMetadata("foo","bar")]
public DateTime Date { get; set; }

并在模板中:

1 @ViewData.ModelMetadata.AdditionalValues["foo"]

因此,如果您想传递网址:

1
2
3
4
5
[UIHint("DateTime")]
[AdditionalMetadata("controller","somecontroller")]
[AdditionalMetadata("action","someaction")]
[AdditionalMetadata("property","someproperty")]
public DateTime Date { get; set; }

并在您的模板中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@{
    var values = ViewData.ModelMetadata.AdditionalValues;
}

<script type="text/javascript">
$('.auto').autocomplete({
    source: function (request, response) {
        $.ajax({
            url: '@Url.Action((string)values["action"], (string)values["controller"])',
            dataType:"json",
            data: {
                filter: request.term
            },
            success: function (data) {
                response(
                    $.map(eval(data), function (item) {
                        return {
                            label: item['@values["property"]']
                        }
                    })
                );
            }
        });
    }                    
});
 相关讨论  

 

  • UHint类具有带有其他params object[] controlParameters的构造函数。 这样做的目的是什么?
  • UHint controlParameters似乎对此更适合

 

 


您可以使用不带AdditionalMetadata属性的UHint,但是需要一些其他代码

1
2
[UIHint("DateTime", null,"key1","value1","key2","value2")]
public DateTime Date { get; set; }

覆盖CreateMetadata:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class CustomMetadataProvider : DataAnnotationsModelMetadataProvider
    {
        public const string UiHintControlParameters ="UiHintControlParameters";

        protected override ModelMetadata CreateMetadata(
            IEnumerable<Attribute> attributes,
            Type containerType,
            Func<object> modelAccessor,
            Type modelType,
            string propertyName)
        {

            ModelMetadata metadata = base.CreateMetadata(
                attributes,
                containerType,
                modelAccessor,
                modelType,
                propertyName);

            IEnumerable<UIHintAttribute> uiHintAttributes = attributes.OfType<UIHintAttribute>();
            UIHintAttribute uiHintAttribute = uiHintAttributes.FirstOrDefault(a => string.Equals(a.PresentationLayer,"MVC", StringComparison.OrdinalIgnoreCase))
                                              ?? uiHintAttributes.FirstOrDefault(a => String.IsNullOrEmpty(a.PresentationLayer));
            if (uiHintAttribute != null)
            {
                metadata.AdditionalValues.Add(UiHintControlParameters, uiHintAttribute.ControlParameters);
            }

            return metadata;
        }

注册CustomMetadataProvider:

1
2
3
4
    public static void Application_Start()
    {
        ModelMetadataProviders.Current = new CustomMetadataProvider();
    }

并在您的模板中:

1
2
3
4
    @{
        IDictionary<string, object> values = (IDictionary<string, object>)
ViewData.ModelMetadata.AdditionalValues[CustomMetadataProvider.UiHintControlParameters];
    }
 相关讨论  

 

  • 嗨,我尝试过您的代码,但是在尝试注册自定义提供程序时,它说它无法将目标类型转换为System.Web.Mvc.ModelMetadataProvider,有什么想法吗?
  • 就像您的示例一样,我们创建的覆盖范围是从DataAnnotationsModelMetadataProvider扩展而来的,但是ModelMetadataProviders.Current期望使用ModelMetadataProvider。
  • Ciaran,请确保从System.Web.Mvc命名空间而不是System.Web.Http.Metadata.Providers覆盖DataAnnotationsModelMetadataProvider

标签:ASP,set,get,DateTime,MVC,UIHint,public,模板
From: https://www.cnblogs.com/Alex80/p/16905861.html

相关文章

  • 篇(13)-Asp.Net Core入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击
    入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击关于Asp.NetCore的新特性Async,异步,还是需要掌握的,这个特性,按微软官方的说法是可以提高你服务器的负荷,可以......
  • SpringMVC-处理404
    一、解析mvc:default-servlet-handler/mvc.xml中<mvc:default-servlet-handler/>由DefaultServletHandlerBeanDefinitionParser负责解析。DefaultServletHandlerBeanDefi......
  • 【ASP.NET Core】MVC控制器的各种自定义:修改参数的名称
    在上一篇中,老周演示了通过实现约定接口的方式自定义控制器的名称。至于说自定义操作方法的名称,就很简单了,因为有内置的特性类可以用。看看下面的例子。[Route("[con......
  • ASP.NET Core教程-Middleware(中间件)
    更新记录转载请注明出处:2022年11月17日发布。2022年11月16日从笔记迁移到博客。Middleware(中间件)中间件介绍中间件可以处理请求(Request)和响应(Response)。中间......
  • springMVC
    SpringMVCssm:mybatis+Spring+SpringMVCSpringMVC:SpringMVC的执行流程SpringMVC:SSM框架整合MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规......
  • 适易工作流平台 C#工作流平台 ASP.NET工作流平台
     工作流实现思路:1.     参考微软WWF工作流2.     充分利用了原配置实现增删改查的框架3.     完全采用数据库记录,利用WEB实现工作流转和通知,利用WEB实现......
  • 定制ASP.NET Core的身份认证
    定制ASP.NETCore的身份认证 大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。在本章,我们将学习如......
  • 框架进行时——SpringMVC流程简析(一)
    基于SpringWeb(5.3.23)的接口请求分析前情提要假定当前Web项目中有如下实体类和接口:packagecom.example.entity;publicclassWebUser{privateStringname;......
  • SpringMVC 拦截异常Exception返回Json,适合Java做后台业务项目
    publicclassExceptionHandlerimplementsHandlerExceptionResolver{@OverridepublicModelAndViewresolveException(HttpServletRequestreque......
  • 用SpringMVC 实现断点续传 (HTTP)
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用......