#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:
К сожалению, анонимные объекты не работают с представлениями. Либо вам нужно вернуть неанонимный объект для просмотра, либо вернуть динамический объект для просмотра.
Ответ №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;
}
Спасибо….