【问题标题】:How to get variable into another razor expression如何将变量放入另一个剃刀表达式
【发布时间】:2015-05-17 00:48:02
【问题描述】:
string[] showProperties = {"id", "name"};
@*
user has many properties, id, name, address, etc...
*@

<!-- now I just want to show the properties in the shownProperties list -->
@for (int j = 0; j < showProperties.Length; j++)
{
    <td>
       @user.showProperties[j]
    </td>
}

通常我会使用@user.id 或@user.name 来显示,但在这种情况下,[property] 是由 showColumns 数组的值动态拉取的。

上面的 @user.showProperties[j] 不起作用,例如 Razor 不会将 id 识别为属性。有没有办法将'id'注入@user.[]作为@user.id?

如何正确使用@user.(mydynamicproperty)

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    如果您的动态对象是ExpandoObject 类型,那么它就像将动态对象转换为IDictionary&lt;string, object&gt; 类型一样简单,因为ExpandoObject 实现了该接口。这是一个示例剃须刀程序:

    @{
    
        string[] showColumns = new string[3] {"Property1", "Property2", "Property3"};
        dynamic myobject = new System.Dynamic.ExpandoObject();
        myobject.Property1 = "First Property!";
        myobject.Property2 = "Second Property!";
        myobject.Property3 = "Third Property!";
    
        for (int i = 0; i < showColumns.Length; i++)
        {
            var propertyValues = (IDictionary<string, object>)myobject;
            <p>@propertyValues[showColumns[i]]</p>
        }
    }
    

    如果您的对象不是ExpandoObject,那么可能会更困难一些。困难,但并非不可能。看答案here

    【讨论】:

    • 我的对象不是ExpandoObject,给出的链接不太有用。希望我编辑我的问题更清楚。你可以看看,看看你是否可以再试一次?谢谢
    • @ChrisLists - 我仍然不确定您要做什么?在您的示例中,showProperties 是什么?显示您对该变量的定义。
    • @ChrisLists - 听起来你只是想反思一下。试试这个:user.GetType().GetProperty(showProperties[i]).GetValue(user, null);
    猜你喜欢
    • 2021-12-29
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2016-01-15
    • 2011-08-08
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多