razor var name中的concat string var

时间:2014-10-18 11:25:21

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我在搜索中找不到任何解决问题的方法,这是我的问题:

我正在使用ASP.NET MVC 4和EF 5,我正在尝试从我的数据库中获取值,但此db字段依赖于其他var。

在控制器中:

public ActionResult Products()
    {
        ViewBag.lang = "ENG";

        DataEntities db = new DataEntities();

        ViewBag.Categories = db.Categories;

        return View();
    }

在模板视图中:

<ul>
@{
    if (ViewBag.Categories != null)
    {
        foreach (var cat in ViewBag.Categories ) 
        {
            <!-- we need in this case "Name_ENG" -->
            var title = "Name_" + @ViewBag.lang;

            <li>@cat.(title)</li>
            <!-- out: cat.ToString() + "(title)" -->

            <li>@cat.(@title)</li>
            <!-- out: cat.ToString() + "(" + title.ToString() + ")" -->

            <li>@cat.@title</li>
            <!-- out: cat.ToString() +  title.ToString()  -->
        }
    }
}
</ul>

有没有办法从cat对象获取属性“Name_ENG”,如@ cat.Name_ENG使用字符串?

“在这种情况下,我正在尝试列出产品页面中的al类别。”

非常感谢

3 个答案:

答案 0 :(得分:1)

不,绝对不是在c#中。你必须使用反射才能工作(当然语法也会不同)。

我认为更好的选择是创建一个基于字符串输入检索值的方法,比如

public T GetValue<T>(string propertyName)

并在需要时从您的视图中调用

答案 1 :(得分:0)

这是来自msdn的文章。您可以按名称访问EF条目属性。但首先你需要dbContext,其次从视图中访问dbContext是错误的。

示例:

object currentName2 = context.Entry(blog).Property("Name").CurrentValue;

另外,如另一个答案所述,反思:

object value = typeof(YourType).GetProperty("PropertyName").GetValue(yourInstance, null);

答案 2 :(得分:0)

试试这个

<ul>
@{
    if (ViewBag.Categories != null)
    {
        foreach (var cat in ViewBag.Categories ) 
        {            
            // here you can do something on cat
            <text>
            <li>@(cat.title)</li>
            </text>
        }
    }
}
</ul>

我个人建议您通过参数将数据传递给视图。并在视图中使用@model(强类型视图)。