gpt4 book ai didi

asp.net-mvc - 如何从 ASP.NET MVC 中的子操作处理程序返回模型状态

转载 作者:行者123 更新时间:2023-12-01 02:56:00 25 4
gpt4 key购买 nike

在我的博客引擎中,我有一个显示博客内容的 Controller 操作,在该 View 中,我调用 Html.RenderAction(...) 来呈现“CreateComment”表单。当用户发表评论时,该帖子由评论 Controller (而不是博客 Controller )处理。

如果评论数据有效,我只需返回一个重定向回博客页面的 URL。

如果评论数据无效(例如评论正文为空),我想将带有错误信息的 ViewData 返回到博客 Controller ,并通过博客 View 返回到 CreateComment 操作/ View ,以便我可以显示哪些字段是错误的。

当启用 Javascript 时,我可以通过 AJAX 正常工作,但现在我正在处理可能禁用 Javascript 的情况。

如果我从评论 Controller 返回一个 RedirecToAction 或 Redirect,模型状态信息就会丢失。

有任何想法吗?

最佳答案

您可以在执行重定向之前将 ModelState 或 ViewData(其中包含 ModelState)存储在 TempData 中,然后再获取它:

// In your CreateComment action before redirect
if (!ModelState.IsValid)
{
TempData["ViewData"] = ViewData;
}

// In your Blog controller's action to which you redirected
if (null != TempData["ViewData"])
{
ViewData = (ViewDataDictionary)TempData["ViewData"];
}

或者,您可以创建自己的 RouteData,设置“ Controller ”和“操作”,清除响应,获取 this.Context 并将其转储到新的 RequestContext 中,使用您之前创建的路由数据使用 ControllerBuilder 创建一个新的 IController,然后然后重写您的路径并使用新的请求上下文执行 Controller 。在那里的某个地方,您必须转储 ModelState 才能继续使用。我还没有尝试过,这似乎太过分了。

关于asp.net-mvc - 如何从 ASP.NET MVC 中的子操作处理程序返回模型状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968500/

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