2016-01-20 67 views
-1

在我的MVC控制器中,我創建了一個「對象」,我簡化爲「學生」。我使用ViewBag將其傳遞給我的視圖。如何從HTML中訪問C#中創建的對象的值?

在我的控制,我有:

ViewBag.Student = new { 
    Id = "52", 
    Value = JsonConvert.SerializeObject(new 
    { 
     StudentName = oneStudent.Name, 
     Age = oneStudent.Age, 
     FavoriteColor = oneStudent.Color, 
     Height = oneStudent.Height 
    }), 
    Text = oneStudent.Name + " --- " + oneStudent.Age, 

}; 

我開始了我的調用ViewBag,使用

@{ 
    var student = ViewBag.Student; 
} 

,我想用量程(或任何類似)來顯示數據。我試圖在html代碼中使用「@ Student.Value」中的一些代碼,但那不起作用。

任何幫助將不勝感激。謝謝。

+0

ViewBag是動態的,那麼 可以使用反射或更改您的代碼到 動態學生= ViewBag.Student; –

+4

在視圖中使用視圖模型比viewbag更容易。 –

+0

@AhmedGalal感謝您的建議,我會研究它。 – JoeFromAccounting

回答

2

您正在爲Viewbag設置一個匿名對象。您無法在剃鬚刀視圖中閱讀該屬性。

你應該做的是創建一個視圖模型來表示你想發送的數據,創建一個對象,初始化屬性值併發送到視圖。此外,使用ViewBag在您的操作方法和視圖之間傳輸數據並不是一個好主意。由於我們將使用視圖模型,因此我們可以將視圖強制輸入到視圖模型並使用它來傳輸數據。

public class StudentDetailVm 
{ 
    public int Id { set; get; } 
    public StudentVm Value { set; get; } 
} 
public class StudentVm 
{ 
    public string StudentName { set; get; } 
    public int Age { set; get; } 
    public int Height {set;get;} 
} 

而在你的GET操作

public ActionResult Details(int id) 
{ 
    var vm = new StudentDetailVm { Id = id, 
           Value = new StudentVm { 
                 StudentName = "Scott", 
                 Age = 23}}; 
    return View(vm); 
} 

,並在你看來這是強類型的,以我們的視圖模型

@model StudentDetailVm 
<h2>@Model.Id</h2> 
<h3>@Model.Value.StudentName</h3>