Переменные данные MVC Razor

#linq #asp.net-mvc-3 #razor #var

#linq #asp.net-mvc-3 #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 =@tm.EmpName; 
                     // 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'". 
  

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

Комментарии:

1. Почему бы просто не использовать модель строгого типа?

Ответ №1:

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

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

Ответ №2:

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

 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
}
  

Ответ №3:

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

     Like
  

var test = (из p в db.EmpDetails упорядочивается по p.EmpName по возрастанию выбирает p).ToList();
ViewBag.test = тестировать;

     And in the view 

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

Спасибо….