我的ASP.NET MVC核心视图中有以下脚本:
window["dataSet1"] = [];
@foreach (var item in Model.SelectedOptions)
{
foreach (var item2 in Model.MyChartData)
{
// ".mph" exists in 'MyChartData' model
// This works... but it's not dynamic
@:window["dataSet1"].push(['@item', @item2.mph);
// How can I get a dynamic variable determine
// what field to retrieve from the model?
// Example values for 'SelectedOptions' are:
// > "mph", "kph", "m/s", "knots"
// I'd like this to work...
@:window["dataSet1"].push(['@item', @item2.@item);
}
}
不是为每个可能的'SelectedOptions'值(mph,kph,m / s,knots等)创建if else语句,而是可以简单地使用变量来引用模型中的特定对象吗?
我从我的尝试中得到的数据是:
window["dataSet1"].push(['mph', MyProject.Models.MyChartData.mph]);
而不是我的模型中的值,例如:
window["dataSet1"].push(['mph', 15.16451]);
答案 0 :(得分:1)
您可以在c#中使用反射添加属性来获取值或简单大小写
示例:
@:window["dataSet1"].push(['@item', @item2.correctvalue( item );
在item2类中:
public decimal correctvalue( propName ) {
return this.GetType().GetProperty(propName).GetValue(this, null);
}
或者更简单:
public decimal correctvalue( propName ) {
if (propName = "mph") {
return this.mph;
}
else ...
}
请记住,您应该验证propName或反射将出错。 masksToBounds
答案 1 :(得分:0)
我创建的解决方案,同时将其打包成静态类,以便将来可以轻松访问。
public static object GetPropertyValue(this object myProperty, string propertyName)
{
return myProperty.GetType().GetProperties()
.Single(pi => pi.Name == propertyName)
.GetValue(myProperty, null);
}