开发者

MVC Razor Var data

开发者 https://www.devze.com 2023-03-12 03:04 出处:网络
Hi i am new to MVC3 Razor . I was trying to display the values from the database table. in controller i wrote the code as

Hi i am new to MVC3 Razor .

I was trying to display the values from the database table.

in controller i wrote the code as

            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.d开发者_JAVA百科eptName
                };

        ViewBag.test = test1; 

and in the view

               @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'". 

Please help me to solve this error. Thanks san


Unfortunately anonymous objects doesn't work with Views. Either you need to return a non-anonymous to view Or return a dynamic object to view.

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


You cannot use anonymous objects in views. Try like this:

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

and then:

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

But personally I would recommend you using strongly typed views instead of ViewBag:

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

and inside the view:

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


I am able to get the values in the view if i convert linq result to toList() in controller.

    Like

var test = (from p in db.EmpDetails orderby p.EmpName ascending select p).ToList(); ViewBag.test = test;

    And in the view 

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

Thanks....

0

精彩评论

暂无评论...
验证码 换一张
取 消