2014-11-16 3 views
0

나는 학생이기 때문에 학교 지원서를 제출해야합니다. 식당 예약 응용 프로그램입니다. 메뉴에 이름을 부여 할 수있는 메뉴에 대한 만들기보기를 만들고이 메뉴에 필요한 메뉴를 선택하려고합니다. 이 요리는 다른 모델에 저장됩니다. 나는이 질문을 사용하고있다 : Create a Dropdown List for MVC3 using Entity Framework (.edmx Model) & Razor Views && Insert A Database Record to Multiple Tables하지만 작동시키지 마라. 이것은 내 모델입니다메뉴에 대한 만들기보기 만들기 다른 메뉴의 드롭 다운 목록으로 요리하기

public class MenuAddController 
{ 
    private BonTempsDbContext db = new BonTempsDbContext(); 
    public Menu Menu { get; set; } 
    public Dictionary<int, string> Voorgerechten { get; set; } 
    public Dictionary<int, string> Hoofdgerechten { get; set; } 
    public Dictionary<int, string> Nagerechten { get; set; } 

    public MenuAddController() { } 
    public MenuAddController(int id) 
    { 
     Menu = db.Menu 
      .Where(e => e.id == id).SingleOrDefault(); 

     // instantiate your dictionaries 

     foreach (var Voorgerecht in db.Voorgerecht) 
     { 
      Voorgerechten.Add(Voorgerecht.id, Voorgerecht.description); 
     } 
     foreach (var Hoofdgerecht in db.Hoofdgerecht) 
     { 
      Hoofdgerechten.Add(Hoofdgerecht.id, Hoofdgerecht.description); 
     } 
     foreach (var Nagerecht in db.Nagerecht) 
     { 
      Nagerechten.Add(Nagerecht.id, Nagerecht.description); 
     } 

    } 
} 

그리고 이것은 나의 컨트롤러입니다.

public class MenusController : Controller 
{ 
    // GET: Menus 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpGet] 
    public ActionResult Add() 
    { 
     return View(new MenuAddController()); 
    } 

    [HttpPost] 
    public ActionResult Add(MenuAddController vm) 
    { 
     if (ModelState.IsValid) 
     { 
      Menu.Add(vm.Menu); <--- this is the error line 
      return View("Index"); // or wherever you go after successful add 
     } 

     return View(vm); 
    } 
} 

그것은 '추가'

사람이 나를 도울 수에 대한 정의를 포함하지 않는

Menu.Add(vm.Menu); 

오류 1 'BonTempsMVC.Menu'에 오류를 준다?

답변

1

MenuMenu 속성이 없으므로 MenusController에 오류가 발생했습니다. 즉, Menu을 신고하지 않았습니다. MenuAddController에서 Menu 객체를 사용하려고하는 것처럼 보입니다. 그러나 완전히 다른 클래스이므로 MenusController에는 분명히 존재하지 않습니다.

클래스 이름에 따라 MVC 패턴을 완전히 파악하지 못했을 수 있습니다. MenuAddController은보기 모델이 될 가능성이있는 저장소 인 것처럼 보입니다. 귀하의 의도가 무엇인지 확실하게 말할 수는 없습니다. 희소식은 MenusController입니다. 그것이 누락 된 유일한 방법은 데이터베이스에 메뉴 (추가되는 것)를 유지/저장하는 방법입니다.

완료하려면 가장 가까운 것으로 보이기 때문에 MenusController부터 시작하겠습니다. 언급 한 바와 같이 데이터 액세스가 모두 누락되었습니다. 컨트롤러 클래스에 BonTempsDbContext 속성을 추가하거나 추가 (POST) 액션 내부에 인스턴스를 인스턴스화하는 것이 좋습니다.

public class MenusController 
{ 
    private BonTempsDbContext db = new BonTempsDbContext(); 
    // actions and stuff 
} 

또는 동작 그 자체 예 :

[HttpPost] 
public ActionResult Add(SomeViewModel vm) 
{ 
    var db = new BonTempsDbContext(); 
    // check model state, etc 
     // db.Menus.Add(vm.Menu) 
} 

다른 이상한 점은 GET 추가 동작입니다. 변수 이름은 MVC 컨텍스트에서 의미가없는 컨트롤러를 전달한다는 것을 나타냅니다. 가장 자주 볼 수있는 컨벤션은 액션의 POST 버전에 게시 할 폼을 설정하기 위해 빈 뷰 모델 객체 (약간 아래에 설명 됨)를 전달하는 것입니다.

숙제를 언급 한 이후로 이것은 완전하지 않습니다 (의사 코드의 일종)!

이제 다른 비트로 이동하십시오. MenuAddController는 객체 나 이름으로 이해가되지 않으므로 이라는 새 객체 인 을 추가 할 Menu 객체의 상태 인 즉 ASP.NET MVC가 사용자를 위해 바인딩 할 객체라고 생각해 봅시다. 사용자는 폼 (당신이 보여주지 않은 것)을 제출할 것입니다. 아마도 뷰 모델 객체에 Menu 속성이 있는데 그것은 데이터베이스에 저장하려고 계획 한 것입니다.

public class MenuAddViewModel 
{ 
    public Menu Menu { get; set; } 
    // ... 
} 

MVC가 자동으로 메뉴 속성을 바인딩 할 수있는 방식으로 양식이 생성되는 경우 간단 할 수 있습니다.이 방법으로 두 Add 액션에서 MenuAddViewModel 객체를 (거의 항상 좋은 점) 재사용 할 수 있습니다. 그것을 GET 뷰에 전달하면 빈 폼을 채우는 데 도움이됩니다. 사용자가 POST 뷰를 POOF에 제출하면 데이터 컨텍스트가 데이터베이스 또는 어디로 가든 저장할 수 있습니다.

설명하는 새 뷰 모델 객체는 Menu 객체의 상태에 대해서만 알고 있어야하므로 데이터 컨텍스트 객체가 필요하지 않습니다. 메뉴 항목을 결합해야하는 경우 해당보기 모델 객체에 속성을 추가하고 거기에서 이동할 수 있습니다.

+0

죄송합니다. 열심히 노력하여 궁극적으로 당신이 제안한 것보다 조금 다릅니다. 도움을 주셔서 감사합니다. –

관련 문제