在过去,我一直使用编辑器模板,通过应用以下数据注释:
[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>