asp.net-mvc – ASP.NET MVC编辑器 – 模板/ UIHint与参数

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC编辑器 – 模板/ UIHint与参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在过去,我一直使用编辑器模板,通过应用以下数据注释:
[UIHint("SomeTemplate")]

viewmodel:

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; }
 }

如果我想使用特定的日期选择器控件而不是普通的控件,它可以实现如下。

例:

@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'    
        });    
    });      
</script>

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

题:

我如何将附加参数传递给LabSampleTypeID和LabSampleDetailID的UIHint部分视图? (像Id一样,有一个自动完成的编辑器模板,将采取一个URL和属性名称为例)

我认为我的自动完成编辑器模板/部分应该看起来像:

$(".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]
                    }
                }));
            }
        })
    }
});

解决方法

您可以使用AdditionalMetadata属性
[UIHint("DateTime")]
[AdditionalMetadata("foo","bar")]
public DateTime Date { get; set; }

并在模板中:

@ViewData.ModelMetadata.AdditionalValues["foo"]

所以如果你想传递一个url:

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

并在您的模板:

@{
    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"])',success: function (data) {
                response(
                    $.map(eval(data),function (item) {
                        return {
                            label: item['@values["property"]']
                        }
                    })
                );
            }
        });
    }                    
});
</script>

猜你在找的asp.Net相关文章