我如何基于从控制器传递到cshtml的模型属性动态生成Kendo UI控件

问题描述:

要求:我想开发一个搜索小部件,它应该根据传递给cshtml的模型属性生成kendo控件。我如何基于从控制器传递到cshtml的模型属性动态生成Kendo UI控件

例如:如果模型包含以下如

public string Name {get; set;} 

然后属性它应产生文本框作为对照,或者如果属性是

public string DateOfBirth {get; set;} 

,它应产生一个datepicker 。 我能够实现的是动态地将模型传递给cshtml,以便cshtml可以松散耦合。我面临的问题是,正在通过的模型具有不同数据类型的属性,但在cshtml中只是针对所有属性使用了文本框控件,这意味着它正在将数据类型作为字符串用于所有属性的字符串模型。

请检查下面的代码: 控制器:

[HttpGet] 
    public ActionResult About(AddressModel obj) 
    { 
       dynamic model = obj; 
       return this.View(model); 
    } 

CSHTML:

@inherits BaseRazorView<object> 
  
<h1>Search Criteria</h1> 
  
@for (int i = 0; i < Model.GetType().GetProperties().Count(); i++) 
{ 
    <div class="row col-md-5"> 
        @Html.EditorFor(model => model.GetType().GetProperties()[i].Name) 
    </div> 
    <br /> 
} 
+0

它是如何将不同领域的类型,如果日期字段是一个字符串? – DontVoteMeDown

您可以通过的PropertyInfo获取属性的属性类型 ,可能用它来区分类型您将使用的输入控件。

https://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.propertytype(v=vs.110).aspx

例如

@for (int i = 0; i < Model.GetType().GetProperties().Count(); i++) 
{ 
    if(Model.GetProperties[i].PropertyType.Name == "String"){ 
     // add an editor or a textbox 
    } 
    else if(Model.GetProperties[i].PropertyType.Name == "DateTime"){ 
     // add a datetime picker 
    } 
}