2014-10-18 114 views
0

我找不到任何解決我的搜索問題,這裏是我的問題:Concat的字符串變種

我使用ASP.NET MVC 4和EF 5,我想從我的數據庫中獲取一個值,但這個數據庫字段取決於其他變量。

在控制器:

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>@[email protected]</li> 
      <!-- out: cat.ToString() + title.ToString() --> 
     } 
    } 
} 
</ul> 

是有辦法使用一個字符串從貓的物體,像@ cat.Name_ENG獲取屬性 「Name_ENG」?

「在這種情況下,我試圖在產品頁面列出al類別。」

非常感謝

+0

我認爲我們不能這樣做。你在分類實體中有什麼屬性? – RajeshKannan 2014-10-18 11:31:23

+0

可能我需要在控制器中生成一個自定義集合,並使用ViewBag傳遞它... – garrigueta 2014-10-18 11:34:47

+0

@garrigueta我在想,將模型中的類別細節傳遞給'View(model)'可以給你更好的選擇,而不是使用ViewBag。然後,您可以利用諸如['Html.Display(title)'](http://msdn.microsoft.com/zh-cn/library/ee310174(v = vs.118).aspx)之類的幫助程序方法你想做什麼。 – Rhumborl 2014-10-18 11:39:09

回答

1

不,絕對不是在c#中。你必須使用反射才能正常工作(當然,語法也會有所不同)。

我認爲一個更好的選擇是創建一個將檢索基於字符串輸入值的方法,像

public T GetValue<T>(string propertyName) 

,需要

+0

最簡單的方法來使用反射或開關/案件與@ ViewBag.lang ?,它只有3個可能的值。 – garrigueta 2014-10-18 11:52:56

+0

@garrigueta,所有的方法有其優點和缺點。我建議你試一試,看看最適合你目前的狀況和需求。老實說,有更多的方法來完成這一點,在這裏討論它有點太寬泛了。此外,你可以結合多種方法,所以它真的取決於你(例如,你可以結合使用方法GetValue和反射...) – walther 2014-10-18 12:12:54

0

這裏的時候調用,從您的看法是一篇文章從msdn。您可以按名稱訪問EF條目屬性。但起初你需要dbContext,其次從視圖訪問dbContext是錯誤的。

例如:

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

此外,作爲另一種回答,反射提到:

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

很高興知道,我可以用這種方式填充自定義數組而不使用ViewBag.lang然後發送它來查看。謝謝 – garrigueta 2014-10-18 11:57:50

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(強類型視圖)。