我是ASP.NET MVC 3的新手,我正在尝试为具有几个关系的User-object创建编辑视图。我有用户的基本编辑视图,使用每个需要处理的关系的选项卡进行拆分。
标签1 =编辑用户 选项卡2 =创建新的组访问权限(包含当前组访问的列表) 等等...
我为编辑视图创建了一个ViewModel:
public class UserViewModel
{
public User User { get; set; }
public GroupAccess GroupAccess { get; set; }
public IEnumerable<GroupAccess> GroupAccessList { get; set; }
}
编辑视图:
@model Project.ViewModels.UserViewModel
<div class="row">
<div class="span9">
<div class="tabbable tabs-left">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab1" data-toggle="tab">User Information</a></li>
<li><a href="#tab3" data-toggle="tab">Group Access</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
@{ Html.RenderPartial("User/_CreateEditUser", Model.User); }
</div>
<div class="tab-pane" id="tab3">
@{ Html.RenderPartial("User/_CreateGroupAccess", Model.GroupAccess); }
@{ Html.RenderPartial("User/_ViewGroupAccessByUser", Model.GroupAccessList); }
</div>
</div>
</div>
</div>
@{ Html.RenderPartial("_SidebarPartial"); }
</div>
每个偏见都是针对各自对象的强类型...
partialviews会发布到同一个控制器UserController,以分隔操作。保存“正确”数据时一切正常,但当发生某种服务器端错误时,我需要以某种方式返回编辑视图。如果我在UserController中的“CreateGroupAccess”操作中收到服务器端错误...如何使用所需的UserId参数返回编辑视图?
我被困了,我猜我现在的解决方案是错误的。
有没有人知道如何最好地解决这种情况?
答案 0 :(得分:0)
让自己成为一名BaseController:
的 BaseController 强> 的
public class BaseController : Controller {
protected const String ModelStateTempData = "ModelStateTempData";
protected Boolean PreserveModelState { get; set; }
protected override RedirectToRouteResult RedirectToAction(string actionName, string controllerName, System.Web.Routing.RouteValueDictionary routeValues)
{
if(PreserveModelState)
TempData[ModelStateTempData] = ModelState;
return base.RedirectToAction(actionName, controllerName, routeValues);
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (TempData[ModelStateTempData] != null && !ModelState.Equals(TempData[ModelStateTempData]))
ModelState.Merge((ModelStateDictionary)TempData[ModelStateTempData]);
base.OnActionExecuting(filterContext);
}
}
的 SomeOtherController 强> 的
public class SomeController : BaseController {
public ActionResult SomeAction(FormCollection collection) {
if(ModelState.IsValid) {
//Do something
return SomeThingValidHappened();
}
//Not Valid
PreserveModelState = true;
return RedirectToAction("myAction");
}
}