Данные MVC Razor Var

Привет, я новичок в MVC3 Razor.

Я пытался отобразить значения из таблицы базы данных.

в контроллере я написал код как

            var test1 = from ed in db.EmpDetails
            join dp in db.Departments on ed.EmpDept equals dp.DeptId
                select new
                {
                    EmpId = ed.EmpId,
                    EmpName = ed.EmpName,
                    EmpDesignation = ed.EmpDesignation,
                    EmpSalary = ed.EmpSalary,
                    EmpUserName =ed.EmpUserName,
                    EmpDept =ed.EmpDept,
                    deptName = dp.deptName
                };

        ViewBag.test = test1; 

и в представлении

               @foreach (var tm in ViewBag.test)
                {

                     string abc [email protected]; 
                     // and the logic
                 }


Here i am getting all the value in the "tm" variable. But when i try to get the particular value of EmpName in a string it is showing the error as "'object' does not contain a definition for 'EmpName'". 

Пожалуйста, помогите мне решить эту ошибку. Спасибо, сан


person san    schedule 10.06.2011    source источник
comment
Почему бы просто не использовать модель строгого типа?   -  person    schedule 10.06.2011


Ответы (3)


К сожалению, анонимные объекты не работают с представлениями. Либо вам нужно вернуть неанонимный объект для просмотра, либо вернуть динамический объект для просмотра.

См .: http://rhizohm.net/irhetoric/post/2011/05/25/Taking-The-M-out-of-MVC-JSON-The-dynamic-Keyword-LINQ-.aspx

person Ankur    schedule 10.06.2011

Вы не можете использовать анонимные объекты в представлениях. Попробуйте вот так:

var test1 = 
    from ed in db.EmpDetails
    join dp in db.Departments on ed.EmpDept equals dp.DeptId
    select ed;
ViewBag.test = test1; 

а потом:

@foreach (var tm in (IEnumerable<Employee>)ViewBag.test)
{
    string abc = tm.EmpName; 
    // and the logic
}

Но лично я бы рекомендовал вам использовать строго типизированные представления вместо ViewBag:

var test1 = 
    from ed in db.EmpDetails
    join dp in db.Departments on ed.EmpDept equals dp.DeptId
    select ed;
return View(test1); 

и внутри представления:

@model IEnumerable<Employee>
@foreach (var tm in Model)
{
    string abc = tm.EmpName; 
    // and the logic
}
person Darin Dimitrov    schedule 10.06.2011

Я могу получить значения в представлении, если я конвертирую результат linq в toList () в контроллере.

    Like

var test = (от p в db.EmpDetails orderby p.EmpName ascending select p) .ToList (); ViewBag.test = тест;

    And in the view 

   @foreach (var tm in ViewBag.test)
   {
           int emId = @tm.id;
    }

Спасибо....

person san    schedule 15.06.2011