2012-12-12 3 views
1

모델 레이어로 Entity Framework를 사용하는 MVC3 응용 프로그램이 있습니다. 에는 EmployeeController에서 보기에서 컨트롤러로 MVC3 면도기 모델 전달

, 내가 가진 : EmployeeEdit에서

public ActionResult GetEmployeeEdit(String id) 
{ 
    // Get the desired Employee 
    var model = GetEmployees().FirstOrDefault(o=>o.EFolderid == id); 
    return View("EmployeeEdit", model); 
} 

private IQueryable<Employee> GetEmployees() 
{ 
    // Returns IQueryable<Employee> 
    return _employeeService.GetTable(); 
} 

내가 가진 :

@model Metastorm.Domain.Models.Employee 

@{ 
    ViewBag.Title = "Employee Edit"; 
} 

@using (Html.BeginForm("SaveEmployee", "Employee", FormMethod.Get, Model)) 
{ 
    <fieldset> 
     <legend>Edit Employee</legend> 
     <br /> 
     @Html.Label("firstName", "First Name: ") 
     @Html.EditorFor(o => @Model.NameFirst) 

     <br /> 
     @Html.Label("lastName", "Last Name: ") 
     @Html.EditorFor(o => @Model.NameLast)   
    </fieldset> 

    <br /> 
    <input class="button" id="submit" type="submit" value = "Save Employee" /> 
} 

을 이제 다시에는 EmployeeController에 :

[HttpGet] 
public ActionResult SaveEmployee(Employee employee) 
{ 
    if (ModelState.IsValid) 
    { 
     // Get the Employee Model again from Entity, Update and save 
     // Unfortunately, the employee object's FolderId value is null 
    } 

    // Just getting a model to satisfy the function 
    var model = GetEmployees().FirstOrDefault(); 
    return View("EmployeeEdit", model); 
} 

을 나는 데 문제가 Employee.NameFirst 및 Employee.NameLas를 제외하고 employee 객체의 모든 속성이 null임을 나타냅니다. t, 이는 View with Html.EditorFor에서 노출 된 속성입니다.

요약하면 필자는 수화 된 Employee 모델 객체를 얻습니다. 컨트롤러에서 뷰로이 모델을 전달합니다. 보기에서 선택한 필드는 업데이트 할 수 있습니다. 그런 다음 Employee 모델은 업데이트가 유지되는 컨트롤러로 다시 전달됩니다.

제 질문은 원래 Controller에서 View로 원래 전달 된 Employee 모델을 그대로 유지하는 것입니다. 즉, 모델을 갖고 싶습니다

답변

0

게시 작업에서 모델 속성을 얻으려면 양식에 모든 속성을 포함시켜야합니다. 올바른 모델 직렬화가 필요합니다.

[HttpGet] 
public ActionResult SaveEmployee([Bind(Include = "NameFirst,NameLast,EFolderid")] Employee employee) 
{ 
    if (ModelState.IsValid) 
    { 
     // Do your staff 
     // The employee object's FolderId value will be not null 
    } 

    // Just getting a model to satisfy the function 
    var model = GetEmployees().FirstOrDefault(); 
    return View("EmployeeEdit", model); 
} 

이 지속적으로 대상 직원의 데이터 멤버 "NameFirst, NameLast, EFolderid을"강제 :

1

시도는이 코드를 사용합니다. include 문에서 Http 요청 중에 보존하려는 모든 멤버를 선언해야합니다.

또한 폼 내부에,보기에이 코드를 추가해야하거나 EFolderid 데이터는 손실됩니다

@Html.HiddenFor(o=> @Model.EFolderid) 

당신이 보존하려는 "HiddenFor"선언 foreach는 멤버를 추가합니다.

0

나는 다른 경로를 갔다. 뷰 모델을 만든 다음 AutoMapper를 사용하여 Employee 객체의 속성을 뷰 모델에 매핑합니다. 뷰 모델을 뷰에 전달하고 변경 한 다음 뷰 모델을 다시 액션으로 전달합니다. 그런 다음 AutoMapper를 사용하여 뷰 모델을 Employee Object의 새 인스턴스에 다시 매핑 한 다음 변경 사항을 유지할 수 있습니다.

관련 문제