나는 이것에 대해 약간의 연구를 해왔지만 모델 바인딩이 MVC 3에서 필요하면 이해하는데 약간의 문제가 있습니다. Create View에 데이터를 제공하기 위해 ViewModel을 만들었습니다.내 행동 만들기에 맞춤형 모델 바인더가 필요합니까?
public class InvitationRequestViewModel
{
public InvitationRequest InvitationRequest { get; private set; }
public IEnumerable<SelectListItem> EventsList { get; private set; }
public string EventId { get; set; }
public InvitationRequestViewModel(InvitationRequest request)
{
InvitationRequest = request;
EventsList = new SelectList(MyRepositoryAndFactory.Instance.FindAllEvents()
.Select(events => new SelectListItem
{
Value = events.ID.ToString(),
Text = String.Format("{0} - {1} - {2}", events.Name, events.Location, events.StartDate.ToShortDateString())
}
), "Value", "Text");
}
}
내 InvitationRequest 컨트롤러 내가 더 문제보기를 만들기 도달 할 수있는 다음과 같은 작업 방법
public ActionResult Create()
{
InvitationRequest request = new InvitationRequest(User.Identity.Name);
return View(new InvitationRequestViewModel(request));
}
[HttpPost]
public ActionResult Create(InvitationRequestViewModel newInvitationRequest)
{
try
{
if (!ModelState.IsValid) return View(newInvitationRequest);
newInvitationRequest.InvitationRequest.Save();
MyRepositoryAndFactory.Instance.CommitTransaction();
return RedirectToAction("Index");
}
catch
{
ModelState.AddModelError("","Invitation Request could not be created");
}
return View(newInvitationRequest);
}
을 가지고 있으며 DDL 사용 가능한 이벤트 목록으로 채워집니다. 내 문제는 InvitationRequestViewModel이 HttpPost Create 메서드에 매핑 될 것으로 예상했기 때문입니다. 대신 "웹 사이트에서 페이지를 표시 할 수 없습니다."라는 오류 메시지가 나타납니다. 서명을 사용할 때 :
public ActionResult Create(FormCollection collection){ }
게시 된 값을 볼 수 있습니다. 컨트롤러에서 자체 매핑 코드를 수행하지 않기를 바랬습니다.
사용자 정의 ModelBinder가 대답입니까? 내가 형 InvitationRequestViewModel의 강력한 형식의보기를 사용하고이가 DDL 코드
<div class="editor-label">
@Html.LabelFor(model => model.InvitationRequest.Event)
</div>
<div class="editor-field">
@Html.DropDownListFor(x => x.EventId, Model.EventsList)
</div>