【问题标题】:concat string var in razor var name剃刀变量名称中的连接字符串变量
【发布时间】:2014-10-19 04:33:35
【问题描述】:

我在搜索中找不到任何可以解决我的问题的东西,这是我的问题:

我正在使用 ASP.NET MVC 4 和 EF 5,我试图从我的 db 中获取一个值,但是这个 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”?

“在这种情况下,我试图在产品页面中列出所有类别。”

非常感谢

【问题讨论】:

  • 我认为我们不能这样做。您在类别实体中有哪些属性?
  • 可能我需要在控制器中生成一个自定义集合并使用 ViewBag 传递它...
  • @garrigueta 我认为将模型中的类别详细信息传递给View(model) 可以为您提供更好的选择,而不是使用 ViewBag。然后你可以利用Html.Display(title)等辅助方法来做你想做的事情。
  • @Rhumborl 我将在产品中使用此功能,也许我需要看看在一个视图中使用多个模型,如 View(model1,model2),但我不知道是否可能很简单,谢谢

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


【解决方案1】:

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

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

public T GetValue<T>(string propertyName)

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

【讨论】:

  • 是使用 @ViewBag.lang 的反射或 switch/case 的最简单方法吗?它只有 3 个可能的值。
  • @garrigueta,所有方法都有其优点和缺点。我建议您尝试两者,看看最适合您当前的情况和需求。老实说,有更多的方法可以实现这一点,在这里讨论它有点过于宽泛。此外,您可以组合多种方法,因此这完全取决于您(例如,您可以将 GetValue 方法与反射相结合......)
【解决方案2】:

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

示例:

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

另外,正如另一个答案中提到的,反思:

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

【讨论】:

  • 很高兴知道,我可以不使用 ViewBag.lang 以这种方式填充自定义数组,然后将其发送到查看。谢谢
【解决方案3】:

试试这个

<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(强类型视图)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2021-10-15
    • 2020-10-17
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多