2015-11-06 3 views
0

Я не могу создавать и обновлять информацию по этому пути: Использование инициализатора и Расчесывание две модели классов, чтобы получить индекс представления, у меня есть две таблицы EmployeeInformation & DesignationHierarchy как:Asp.Net MVC Методы

CREATE TABLE [dbo].[DesignationHierarchy](
    [Id] [numeric](18, 0) IDENTITY(1,1) NOT NULL, 
    [EmployeeId] [numeric](18, 0) NULL, 
    [LineManagerId][numeric](18, 0) NULL 
) 

&

CREATE TABLE [dbo].[EmployeeInformation](
    [Id] [numeric](18, 0) IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](255) NULL 
) 

и ModelClasses как:

public class DesignationHierarchy 
{ 
    public decimal Id { get; set; } 
    public decimal EmployeeId { get; set; } 
    public decimal LineManagerId { get; set; } 

} 
public class EmployeeInformation 
{ 
    public decimal Id { get; set; } 
    public string Name { get; set; } 

} 

и

public class EmployeeInformationHierarchy 
{ 
    public EmployeeInformation EmployeeInformation { get; set; } 
    public DesignationHierarchy DesignationHierarchy { get; set; } 
} 

и методы создания:

public ActionResult Create() 
{ 
    ViewBag.EmployeeName = new SelectList(db.EmployeeInformation.ToList(),"Id","Name"); 

    return View(); 
} 

[HttpPost] 
public ActionResult Create(DesignationHierarchy designationHierarchy) 
{ 
    if (ModelState.IsValid) 
    { 
     db.DesignationHierarchy.Add(designationHierarchy); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(designationHierarchy); 
} 

и редактировать:

public ActionResult Edit(decimal id) 
{ 
    DesignationHierarchy designationHierarchy = db.DesignationHierarchy.Find(id); 
    ViewBag.EmployeeName = new SelectList(db.EmployeeInformation.ToList(), "Id", "Name",designationHierarchy); 
    return View(designationHierarchy); 
} 
[HttpPost] 
public ActionResult Edit(DesignationHierarchy designationHierarchy) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(designationHierarchy).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(designationHierarchy); 
} 

и индекс:

public ViewResult Index() 
{ 
    var designationHierarchy = from d in db.EmployeeInformation 
           join r in db.DesignationHierarchy on d.Id equals r.LineManagerId 
           select new EmployeeInformationHierarchy { EmployeeInformation = d, DesignationHierarchy = r }; 

    return View(designationHierarchy); 
} 

и Views:

<div class="editor-label left_align"> 
    @Html.HiddenFor(model => model.Id) 
    @Html.LabelFor(model => model.EmployeeId,"Name") 
</div> 
<div class="editor-field left_right_padding"> 
    @Html.DropDownListFor(m => m.EmployeeId, (SelectList)ViewBag.EmployeeName, "--Select Name--") 
    @Html.ValidationMessageFor(model => model.EmployeeId) 
</div> 

<div class="editor-label left_align"> 
    @Html.LabelFor(model => model.LineManagerId,"Line Manager") 
</div> 
<div class="editor-field left_right_padding"> 
    @Html.DropDownListFor(m => m.LineManagerId, (SelectList)ViewBag.EmployeeName, "--Select Name--") 
    @Html.ValidationMessageFor(model => model.LineManagerId) 
</div> 

и вид на индекс:

<td> 
    @Html.DisplayFor(modelItem => item.EmployeeInformation.Name) 
</td> 
<td> 
    @Html.DisplayFor(modelItem => item.EmployeeInformation.Name) 
</td> 
<td> 
    @Html.ActionLink("Edit", "Edit", new { id=item.DesignationHierarchy.Id }) | 
    @Html.ActionLink("Delete", "Delete", new { id=item.DesignationHierarchy.Id }) 
</td> 
+0

Так что это проблема? –

+0

@StephenMuecke При создании отношения между сотрудниками значение не обновляется в таблице базы данных ОбозначениеИерархия. Не могу найти, что не так с моим кодом. –

+0

Сначала вы используете Code First или DataBase? – user2771704

ответ

0

путем изменения типа данных Id в INT, а также изменения в представлениях, то есть в Edit просмотра Id хранится Hidden используя методы HTML-помощника. Тем не менее у меня возникла проблема с созданием индекса. Хотя Оставшийся ответ на мой предыдущий вопрос:

DB Сценарий:

CREATE TABLE [dbo].[DesignationHierarchy](
     [Id] [int] IDENTITY(1,1) NOT NULL, 
     [EmployeeId] [numeric](18, 0) NULL, 
     [LineManagerId][numeric](18, 0) NULL 
    ) 

Модель Класс:

public class DesignationHierarchy 
     { 
      [Key] 
      public int Id { get; set; } 
      public decimal EmployeeId { get; set; } 
      public decimal LineManagerId { get; set; } 

     } 

Методы действия:

public ActionResult Create() 
{ 
    ViewBag.EmployeeName = new SelectList(db.EmployeeInformation.ToList(), "Id", "Name"); 
    ViewBag.LineManagerName = new SelectList(db.EmployeeInformation.ToList(), "Id", "Name"); 
    return View(); 
} 
[HttpPost] 
public ActionResult Create(DesignationHierarchy designationHierarchy) 
{ 
    if (ModelState.IsValid) 
    { 
     db.DesignationHierarchy.Add(designationHierarchy); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(designationHierarchy); 
} 
public ActionResult Edit(decimal id) 
{ 
    DesignationHierarchy designationHierarchy = db.DesignationHierarchy.Find(id); 
    ViewBag.EmployeeName = new SelectList(db.EmployeeInformation.ToList(), "Id", "Name"); 
    ViewBag.LineManagerName = new SelectList(db.EmployeeInformation.ToList(), "Id", "Name"); 

    return View(designationHierarchy); 
} 
[HttpPost] 
public ActionResult Edit(DesignationHierarchy designationHierarchy) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(designationHierarchy).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(designationHierarchy); 
} 

и просмотров Создание:

<div class="editor-label left_align"> 
      @Html.LabelFor(model => model.EmployeeId, "Name") 
     </div> 
     <div class="editor-field left_right_padding"> 
     @Html.DropDownListFor(m => m.EmployeeId, (SelectList)ViewBag.EmployeeName, "--Select Name--") 
      @Html.ValidationMessageFor(model => model.EmployeeId) 
     </div> 
     <div class="editor-label left_align"> 
      @Html.LabelFor(model => model.LineManagerId, "Line Manager") 
     </div> 
     <div class="editor-field left_right_padding"> 
     @Html.DropDownListFor(m => m.LineManagerId, (SelectList)ViewBag.LineManagerName, "--Select Name--") 
      @Html.ValidationMessageFor(model => model.LineManagerId) 
     </div> 

и Edit:

<div class="editor-label left_align"> 
     @Html.HiddenFor(model => model.Id) 
     @Html.LabelFor(model => model.EmployeeId, "Name") 
    </div> 
    <div class="editor-field left_right_padding"> 
    @Html.DropDownListFor(m => m.EmployeeId, (SelectList)ViewBag.EmployeeName, "--Select Name--") 
     @Html.ValidationMessageFor(model => model.EmployeeId) 
    </div> 
    <div class="editor-label left_align"> 
     @Html.LabelFor(model => model.LineManagerId, "Line Manager") 
    </div> 
    <div class="editor-field left_right_padding"> 
    @Html.DropDownListFor(m => m.LineManagerId, (SelectList)ViewBag.LineManagerName, "--Select Name--") 
     @Html.ValidationMessageFor(model => model.LineManagerId) 
    </div> 
0

Я думаю, что проблема может быть в ваших классах модели, потому что вы используете decimal в качестве первичного ключа. Пожалуйста, попробуйте изменить свои модели, как показано ниже:

public class DesignationHierarchy 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public decimal Id { get; set; } 
    public decimal EmployeeId { get; set; } 
    public decimal LineManagerId { get; set; } 

} 
public class EmployeeInformation 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public decimal Id { get; set; } 
    public string Name { get; set; } 

} 

Примечание: не забудьте добавить using System.ComponentModel.DataAnnotations; в верхней части файла, это пространство имен, где [DatabaseGenerated(DatabaseGeneratedOption.Identity)] находится.

UPDATE:

Вы писали, что вы используете Code First, так что вы должны были контекстную класс вроде этого:

public class MyContext : DbContext 
    { 
    public DbSet<DesignationHierarchy> DesignationHierarchys { get; set; } 
    public DbSet<EmployeeInformation> EmployeeInformations{ get; set; } 
    } 

Так вы могли бы попробовать этот код для создания и редактирования действий?

Вот код Create:

public ActionResult Create() 
{ 
    ViewBag.EmployeeName = new SelectList(db.EmployeeInformation.ToList(),"Id","Name"); 

    return View(); 
} 

[HttpPost] 
public ActionResult Create(DesignationHierarchy designationHierarchy) 
{ 
    if (ModelState.IsValid) 
    { 
     using (var db = new MyContext()) 
     { 
       db.DesignationHierarchy.Add(designationHierarchy); 
       db.SaveChanges(); 
     } 
     return RedirectToAction("Index"); 
    } 
     View(designationHierarchy); 
} 

И Edit:

public ActionResult Edit(decimal id) 
{ 
    ViewBag.EmployeeName = new SelectList(db.EmployeeInformation.ToList(), "Id", "Name",designationHierarchy); 

    using (var db = new MyContext()) 
    { 
      return View(db.DesignationHierarchy.Find(id)); 
    } 
} 

[HttpPost] 
public ActionResult Edit(DesignationHierarchy designationHierarchy) 
{ 
    if (ModelState.IsValid) 
    { 
     using (var db = new MyContext()) 
     { 
     db.Entry(designationHierarchy).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
     } 
    } 
    return View(designationHierarchy); 
} 

UPDATE 2: Это действительно странно. Я все еще думаю, что это может быть из-за значения decimal.

Не могли бы вы заменить

DesignationHierarchy designationHierarchy = db.DesignationHierarchy.Find(id); 

в вашем редактирования действий с

DesignationHierarchy designationHierarchy = db.DesignationHierarchy 
               .SingleOrDefault(x=> x.Id == id); 
+0

@AshokBhattarai, пожалуйста, попробуйте код для Create and Edit из моего ответа, просто замените MyContext на GapscoVariantInetDBContext. – user2771704

+0

@AshokBhattarai Пожалуйста, попробуйте код из Update 2, если это не поможет, то я из идей. Сожалею. – user2771704