MVC4와 함께 VS2012 RC를 사용하고 있습니다. 모든 의도와 목적을 위해 봇이 MVC3 인 것처럼 보자. 상위 모범 사례와 다른 모델을 사용하는 폼을 사용하여 PartialView를 처리하는 방법에 대한 표준 모범 사례가 무엇인지 알고 싶습니다.부모보기와 다른 모델로 PartialView를 처리하는 방법
예를 들어 사용 가능한 모든 역할의 테이블을 표시하는보기와 사용자가 더 많은 역할을 추가 할 수있는 양식이 있습니다.
홈페이지보기 - Roles.cshtml :
@model IEnumerable<RobotDog.Models.RoleModel>
<table>
@foreach(var role in Model) {
<tr>
<td class="roleRow">@role.Role</td>
</tr>
}
</table>
<div class="modal hide">
@Html.Partial("_AddRolePartial")
</div>
_AddRolePartial.cshtml
@model RobotDog.Models.RoleModel
@using(Html.BeginForm("AddRole","Admin", FormMethod.Post)) {
@Html.TextBoxFor(x => x.Role, new { @class = "input-xlarge", @placeholder = "Role"})
<input type="submit" value="Submit" class="btn btn-primary btn-large"/>
}
모델 :보기에 대한
public class RoleModel {
[Required]
[DataType(DataType.Text)]
[Display(Name = "Role")]
public string Role { get; set; }
}
컨트롤러 :
public ActionResult Roles() {
var model = from r in System.Web.Security.Roles.GetAllRoles()
select new RoleModel {Role = r};
return View(model);
}
PartialView에 대한 16,
컨트롤러 :
[HttpPost]
public ActionResult AddRole(RoleModel model) {
try {
System.Web.Security.Roles.CreateRole(model.Role);
RedirectToAction("Roles");
} catch(Exception) {
ModelState.AddModelError("", "Role creation unsuccessful.");
}
return ????; // not sure how to pass ModelState back to partialView
}
나는 RoleModel
및 IEnumerable<RoleModel>
을 개최 뷰 모델을 만드는 방법에 대해 생각하지만 난 싶었 뷰 모델 매번를 만들 필요없이 내가 원하는 것을 달성하기 위해 더 스트림 줄 지어 방법이있을 것처럼 보인다 이 PartialView를 사용하십시오.
예.하지만 이는 솔루션의 절반에 불과합니다. AddRole 컨트롤러에 폼을 제출할 때 어떻게 예외가 발생했을 때 폼에'ModelState'를 다시 보냅니 까? – bflemi3
그 경우에는 실제로 두 가지 옵션 만 있습니다. 당신은 AJAX 요청을 사용해야합니다.이 요청은 역할 추가와 관련된 페이지의 부분 만 업데이트하거나, 역할 목록과 빈 역할 ViewModel을 포함하도록 ViewModel을 업데이트하기 위해 포함해야합니다. 나는 AJAX를 추천 할 것입니다. 그렇지 않으면 오류를 다시 보내야 할 때 반복해서 역할을 재 쿼리해야 할 것입니다. AJAX를 사용하면 모델 오류를 쉽게 반환 할 수 있으며 새로 생성 된 역할을 기존 목록에 추가 할 수도 있습니다. – Tommy
그래서 내 컨트롤러가'JsonResult'를 리턴 할 것이고 제출이 성공하면 클라이언트 측에서 페이지를 다시로드하는 것을 처리 할 것입니까? – bflemi3