2012-07-17 3 views
0

MVC의 기본 사항을 배우려고합니다 (저는 nerddinner 자습서를 사용하고 있습니다).부분보기에서 요청을 보낼 때 오류가 발생했습니다.

I는 모델 정의 :

public class DinnerFormViewModel 
{ 

    // Properties 
    public Dinner Dinner { get; private set; } 

    public SelectList Countries { get; private set; } 

    // Constructor 
    public DinnerFormViewModel(Dinner dinner) 
    { 
     Dinner = dinner; 
     Countries = new SelectList(PhoneValidator.Countries, dinner.Country); 
    } 
} 

가 나는 부분도 정의 :

@model MyNerddiner.Models.DinnerFormViewModel 



@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>Dinner</legend> 

    @Html.HiddenFor(model => model.Dinner.DinnerID) 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.Dinner.Title) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Dinner.Title) 
     @Html.ValidationMessageFor(model => model.Dinner.Title) 
    </div> 
</fieldset> 
} 

일반적인 관점에서로드된다

@model MyNerddiner.Models.DinnerFormViewModel 
@{ 
    ViewBag.Title = "Create"; 
} 
<div id="Create" > 
<h2>Host a Dinner</h2> 

    @Html.Partial("_DinnerForm") 

</div> 

제어기

public ActionResult Create() 
{ 

    Dinner dinner = new Dinner() 
    { 
     EventDate = DateTime.Now.AddDays(7) 
    }; 
    return View(new DinnerFormViewModel(dinner)); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(DinnerFormViewModel dinnerViewModel) 
{ 
    Dinner dinner = null; 
    if (ModelState.IsValid) 
    { 
     try 
     { 
      dinner = dinnerViewModel.Dinner; 
      UpdateModel(dinner); 
      dinnerRepository.Add(dinner); 
      dinnerRepository.Save(); 

      return RedirectToAction("Details", new { id = dinner.DinnerID }); 
     } 
     catch 
     { 
      ModelState.AddRuleViolations(dinner.GetRuleViolations()); 
      return View(dinner); 
     } 
    } 
    return View(new DinnerFormViewModel(dinner)); 
} 

지금, 나는 오류 받고 있어요 (포스트 백에) 만들려고 해요 때, 어딘가에 프로그램이 DinnerFormViewModel을 시작하려고 때문인지, 내가 추측 할 수

No parameterless constructor defined for this object.

을하지만 경우, 그리고 왜? 어떻게해야 제대로 할 수 있을까요?

답변

0

MVC 프레임 워크는보기 모델에 매개 변수를 사용하지 않는 생성자를 사용하여 빈 인스턴스를 만들어 요청 데이터를 채울 수 있어야합니다. DinnerFormViewModel은 매개 변수가없는 생성자를 구현하지 않으므로 추가하면 문제가 해결됩니다.

+0

DinnerFormViewModel의 매개 변수없는 생성자를 만든 후에도 동일한 오류가 발생합니다. 이제 linq 생성 클래스에서 somwhere 일어나는. – happyZZR1400

+0

그건 그렇고 질문 : 인스턴스가 이미 첫 번째 라우팅에서 생성되었을 때 요청에서 데이터로 채울 빈 인스턴스를 만드는 이유는 무엇입니까? – happyZZR1400

+0

인스턴스는 라우팅에서 예상되는 메소드 매개 변수와 일치하는 요청의 패턴을 찾을 때만 작성됩니다. – Maess

0

글쎄, 문제를 발견하고 모델 및 생성자와 관련이 없습니다. @ Html.DropDownListFor (모델 => model.Countries, Model.Countries) @ Html.ValidationMessageFor (모델 => model.Countries) 난에서 선택 :

문제는보기 다음 행 하였다 포함 예외가 왔던 곳은 나라 값이 null이기 때문이다.

내가 변경 한 후 모델 => model.Countries 에 모델 => model.Dinner.Country 예외가

나는 내 자신에이 문제를 해결 기뻐요을 슬로우 들렸다

!

관련 문제