여러 엔터티 중에서 선택해야하는 양식이 있습니다. 그래서 여기Asp.net MVC 3 : 컨트롤러에서 모델이 비어 있습니까?
내가 무슨 짓을했는지 있습니다 :
뷰 모델 작성 :
public class EntityChooserModel
{
public IEnumerable<Entity> AvailableEntities { get; set; }
public int SelectedId;
}
내가 컨트롤러에서 두 가지 작업, [HTTPPost], 하나없이 하나를했습니다합니다. 두 가지 모두에서 세션 데이터 인 "SessionUserData"가 데이터 모델 바인딩을 통해 바인딩됩니다.
[Authorize]
public ActionResult EntityChooser(SessionUserData sessionData)
{
List<Entity> entities = _userStore.GetRoles(User.Identity.Name).Select(ur => ur.Entity).ToList();
Entity entity = sessionData.IdCurrentEntity != null ? entities.Where(e => e.Id == sessionData.IdCurrentEntity).First() : entities.First();
return View(new EntityChooserModel() { SelectedId = entity.Id, AvailableEntities = entities });
}
.
[Authorize]
[HttpPost]
public ActionResult EntityChooser(EntityChooserModel model, SessionUserData sessionData, String returnUrl)
{
if (ModelState.IsValid)
{
Entity entity = _userStore.GetRoles(User.Identity.Name).Select(ur => ur.Entity).Where(e => e.Id == model.SelectedId).First();
sessionData.IdCurrentEntity = entity.Id;
RedirectToDefaultPage(returnUrl);
}
return View(model);
}
그리고 강력한 형식의보기 :
@model My.Full.Namespace.EntityChooserModel
@{
ViewBag.Title = "EntityChooser";
Layout = "~/Views/Shared/_LoginLayout.cshtml";
}
<div id="login-wrapper">
<div id="title">
<h1>Login</h1>
</div>
<div id="login">
@using (Html.BeginForm("EntityChooser", "Auth", FormMethod.Post, new { id = "ChooseFormId" }))
{
@Html.ValidationSummary(true, "Loggin error")
<div>
<span>Choose an entity:</span>
@Html.DropDownListFor(x => x.SelectedId, new SelectList(Model.AvailableEntities, "Id", "Name"))
</div>
<p class="right-aligned">
<a href="javascript:document.getElementById('ChooseFormId').submit();" class="adm-button">
<span class="next-btn"><span>Select</span></span></a>
</p>
<input type="submit" style="display: none" />
}
</div>
</div>
문제는 내가 두 번째 모델에서 데이터를 수신 할 때, 나는 빈 개체를했습니다 것입니다. 콜렉션은 비어 있으며 id는 기본값 (0)으로 설정됩니다.
무엇이 잘못 되었나요? 나는 이것에 관해 내가 놓친 것을 발견 할 수 없다.
내가 ForModel()
하지 않은 MVC 형식을 처음이고, 나는 DropDownList로
좋아요! 나는 왜 내가 대신에 여기에 들판을 놓았는지 모르겠다! 정말 고맙습니다! – J4N