我如何基于从控制器传递到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 />
}
答
您可以通过的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
}
}
它是如何将不同领域的类型,如果日期字段是一个字符串? – DontVoteMeDown