2016-08-25 2 views
-1

когда нажмите изменить ссылку на индексной странице он дает мне ошибку модели элемент передается в словарь типа «System.Data.Entity.DynamicProxies.Employee_2EF71CC17A29BA91B02BC5CDB0EE5AF82D363EEF7E174A21C9546772913AA929», но это словарь требует элемента модели типа «WebCourse.Models.Customemployee». У меня есть пользовательские модели CustomemployeeКак передать данные с точкой зрения индекса, чтобы изменить вид

namespace WebCourse.Models Customemployee 
{ 
    public class Customemployee 
    { 

//represent employee table in database 

    public string Name { get; set; } 
     public int Salary { get; set; } 
     public string Email { get; set; } 
     public int DistrictId { get; set; } 
//represent employee course table in database 
     public List<EmployeeCourse> Courses { get; set; } 

//represent employee language table in database 

     public List<EmployeeLangage> Langs { get; set; } 

    } 

} 

и мой контроллер empcourse

using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using WebCourse.Models; 
using System.Data.Entity; 
namespace WebCourse.Controllers 
{ 
    public class empcourseController : Controller 
    { 
     mycourseEntities db = new mycourseEntities(); 
     // GET: empcourse 
     public ActionResult Index() 
     { 
      var query = db.Employees.ToList().Select(p => new EmpInfo 
      { 
       Id = p.Id, 
       Name = p.Name, 
       Salary = Convert.ToInt32(p.Salary), 
       Email = p.Email, 
       DistrictName = p.Destrict.DistrictName, 
       CityName = p.Destrict.City.CityName, 
       CountryName = p.Destrict.City.Country.CountryName, 
       CourseNames = p.EmployeeCourses.Select(t => t.Course.CourseName).ToList(), 
       LanguageName = p.EmployeeLangages.Select(t => t.Language.LnaguageName).ToList(), 
       levelName = p.EmployeeLangages.Select(t => t.Level.LevelName).ToList(), 
       CourseName = string.Join(",", p.EmployeeCourses.Select(t => t.Course.CourseName).ToList()) 
      }); 

      return View(query); 

     } 
     public ActionResult Create() 
     { 
      ViewBag.CountryId = new SelectList(db.Countries, "Id", "CountryName"); 
      ViewBag.LanaguageId = new SelectList(db.Languages.ToList(), "Id", "LnaguageName"); 
      ViewBag.LevelId = new SelectList(db.Levels.ToList(), "Id", "LevelName"); 
      ViewBag.CourseId = new SelectList(db.Courses.ToList(), "Id", "CourseName"); 
      return View(); 
     } 
     public ActionResult Edit(int id) 
     { 
//how to pass data from index view to edit view 
      Employee old = db.Employees.Find(id); 
      return View(old); 

     } 
     [HttpPost] 
     public ActionResult Create(Customemployee cemp) 
     { 


      using (mycourseEntities db = new mycourseEntities()) 
      { 
       Employee E = new Employee { Name = cemp.Name, Salary = cemp.Salary, Email = cemp.Email, DistrictId = cemp.DistrictId }; 
       foreach (var i in cemp.Courses) 
       { 

        E.EmployeeCourses.Add(i); 
        db.SaveChanges(); 
       } 
       foreach (var i in cemp.Langs) 
       { 

        E.EmployeeLangages.Add(i); 
        db.SaveChanges(); 
       } 
       db.Employees.Add(E); 
       db.SaveChanges(); 
      } 
      return View(); 
     } 
     public JsonResult getcitybyid(int id) 
     { 
      db.Configuration.ProxyCreationEnabled = false; 
      return Json(db.Cities.Where(a => a.CountryId == id), JsonRequestBehavior.AllowGet); 
     } 
     public JsonResult getdistrictbyid(int id) 
     { 
      db.Configuration.ProxyCreationEnabled = false; 
      return Json(db.Destricts.Where(a => a.CityId == id), JsonRequestBehavior.AllowGet); 
     } 
    } 
} 

шоу здесь ошибка в коде

public ActionResult Edit(int id) 
      { 
    //how to pass data from index view to edit view 
       Employee old = db.Employees.Find(id); 
       return View(old); 

      } 

Как передать данные с точки зрения индекса, которые показывают данные для редактирования зрения

ответ

0

Из сообщения об ошибке, похоже, что в вашем представлении «Редактировать» пронумерованный до Customemployee типа. Это означает, что вы должны передать объект класса Customemployee из вашего действия «Изменить действие» в это представление. Но ваш текущий код отправляет объект типа Employee.

Так что обновите свой метод действия «Редактировать», чтобы отправить правильный объект в представление.

public ActionResult Edit(int id) 
{ 
    Employee old = db.Employees.Find(id); 
    if(old!=null) 
    { 
    var vm = new CustomEmployee(); 
    vm.Name = old.Name; 
    vm.Email = old.Email; 
    // Assign other property values as needed. 
    return View(vm); 
    } 
    return Content("No employees found for the Id passed"); 
    // to do : Ideally return a "NotFound" view 
} 
+0

ОК это работает, но у меня есть проблема проблемы, когда я получить выпадающее значение списка в редактировании вы можете сказать мне, как получить выбранное значение курса и districtid в результате редактирования действий и зрение – user3223372

+0

Зависит от того, как вы оказываете падать. Не видя кода просмотра, я не могу сказать вам. – Shyju

+0

Страна: @ Html.DropDownList ("CountryId")
Город: <выберите идентификатор = имя "CityList" = "CityId">
Район: <выберите идентификатор = имя "districtlist" = "DistrictId">
Курсы: @ Html.DropDownList («CourseId»)
я создать представление, как описано выше, и как контроллер работы он будет отображаться в создании метода выше в контроллере и getcitybyid сделать каскад между страной и городом и getdistrictid функциями, чтобы сделать каскад между городом и районом – user3223372

Смежные вопросы