gpt4 book ai didi

c# - 一页多表单 (MVC3)

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:55 25 4
gpt4 key购买 nike

我是 ASP.NET MVC 3 的新手,我正在尝试为具有多个关系的用户对象创建编辑 View 。我有用户的基本编辑 View ,每个需要处理的关系都有选项卡。

选项卡 1 = 编辑用户选项卡 2 = 创建新的组访问权限(包含当前组访问权限的列表)等等……

我为编辑 View 创建了一个 ViewModel:

public class UserViewModel
{
public User User { get; set; }
public GroupAccess GroupAccess { get; set; }
public IEnumerable<GroupAccess> GroupAccessList { get; set; }
}

编辑 View :

@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>

每个局部 View 都是针对它们各自的对象的强类型...

部分 View 发布到同一个 Controller UserController,以分离操作。保存“正确”数据时一切正常,但是当发生某种服务器端错误时,我需要以某种方式返回到编辑 View 。如果我在 UserController 的“CreateGroupAccess”操作中收到服务器端错误...我如何使用所需的 UserId 参数返回到编辑 View ?

我被卡住了,我猜我目前的解决方案走错了方向。

有人知道如何最好地解决这种情况吗?

最佳答案

让自己成为一个 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");
}
}

关于c# - 一页多表单 (MVC3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12301292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com