动态访问模型与视图

时间:2016-05-10 12:00:03

标签: javascript c# asp.net-core-mvc

我的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]);

2 个答案:

答案 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);
}