c#将字符串从一个动作传递到另一个动作

本文关键字:另一个 一个 字符串 | 更新日期: 2023-09-27 18:02:15

想象一个用户可以更新、删除、编辑甚至投票输入的页面。由于每个操作将由不同的ActionResult处理,因此在出现错误时,必须更改页面的url。我的问题很简单:假设你的页面是"http://localhost/Input/",当你有一些错误,我想重定向到"http://localhost/Input/Error",并显示一个错误消息。我不想使用会话,因此请不要给我这个链接。基本上,我想做的是类似的事情:

public ActionResult Create(FormCollection form) { 
        try {
            // some code here
            return RedirectToAction("Index");
        }
        catch () {
             string errorMessage = "You have done something bad!"; 
             // and I want to pass this string to my Error Action.
             return RedirectToAction("Error"); 
        }
}

我用过的解决方案

我知道我说过我不想使用TempData,但显然这是最好的选择,我已经用它来解决我的问题。至于答案,我选择了digbswift的答案,因为如果你不想使用Session进行这种类型的操作,那是你能做的最合乎逻辑的事情。

c#将字符串从一个动作传递到另一个动作

如您所说,如果您不想使用会话,那么TempData不是一个选项。理想情况下,您应该尽量不将错误消息传递到下一页。相反,将错误消息存储在资源文件中。

您可以将id/enum传递到下一页,然后根据传递的参数检索错误:

return RedirectToAction("Error", new { ErrorId = 4 });
public ActionResult Error(int errorId){ ... }

Edit:另一种选择(因为考虑到db写-读会很昂贵)是将消息写入cookie,然后在重定向后检索它,然后删除cookie。这不是很好,我个人不会使用它。但如果您需要定制消息,这是一个选项。

是否有从发送者页面将错误消息保存在数据库中并将其返回到另一个页面的选项?我知道它与上面发布的类似,但它会更动态,因为你不需要把消息放在资源文件中,你可以将错误消息保存在db中,并在其他页面上获得

我想建议另一种方法。我使用AJAX来执行这些类型的操作,因此,我可以从控制器返回一个视图,或者大部分是部分视图,而不是将用户重定向到另一个视图。因此,我可以使用ViewBag在我的视图中使用字符串消息。

public ActionResult Create(FormCollection form) { 
    try {
        // some code here
        return View('CreationSuccess');
    }
    catch () {
         ViewBag.errorMessage = "You have done something bad!"; 
         // and I want to pass this string to my Error Action.
         return View('CrudError');
    }
}