首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用RedirectToAction维护ModelState?

如何使用RedirectToAction维护ModelState?
EN

Stack Overflow用户
提问于 2008-11-11 00:26:45
回答 6查看 41K关注 0票数 75

如果我的中有错误,如何返回不同操作的结果或将用户移动到不同的操作

而不会失去我的

信息?

场景是;

操作接受来自删除表单的POST,该表单由我的

操作/视图。如果

我希望将用户移回

操作/视图,并显示由

中的操作

..。如何在ASP.NET MVC中做到这一点?

代码语言:javascript
复制
[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Delete)]
public ActionResult Delete([ModelBinder(typeof(RdfUriBinder))] RdfUri graphUri)
{
    if (!ModelState.IsValid)
        return Index(); //this needs to be replaced with something that works :)

    return RedirectToAction("Index");
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-11-11 01:16:34

将视图数据存储在

并在您的

操作,如果存在的话。

代码语言:javascript
复制
...
   if (!ModelState.IsValid)
       TempData["ViewData"] = ViewData;

   RedirectToAction( "Index" );
}

 public ActionResult Index()
 {
     if (TempData["ViewData"] != null)
     {
         ViewData = (ViewDataDictionary)TempData["ViewData"];
     }

     ...
 }

编辑

我查看了MVC的在线源代码,发现

控制器中的属性是可设置的,因此最简单的方法可能就是将所有

,包括

,添加到索引操作。

票数 103
EN

Stack Overflow用户

发布于 2009-04-22 08:03:23

使用动作过滤器(PRG模式)(和使用属性一样简单)

提到过

这里

这里

..。

票数 42
EN

Stack Overflow用户

发布于 2008-11-11 19:42:37

请注意,tvanfosson的解决方案并不总是有效的,尽管在大多数情况下它应该是好的。

该特定解决方案的问题在于,如果您已经有任何ViewData或ModelState,则最终会使用前一个请求的状态将其全部覆盖。例如,新请求可能有一些与传递给操作的无效参数相关的模型状态错误,但这些错误最终会被隐藏,因为它们被覆盖了。

它可能无法按预期工作的另一种情况是,如果您有一个初始化了一些ViewData或ModelState错误的操作筛选器。同样,它们将被该代码覆盖。

我们正在寻找一些ASP.NET MVC的解决方案,可以让你更容易地合并来自两个请求的状态,所以请继续关注。

谢谢,Eilon

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/279665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档