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

时间:2011-07-17 18:27:49

标签: c# string model-view-controller parameters action

想象一下用户可以更新,删除,编辑甚至投票的页面。由于每个操作都将由不同的ActionResult处理,因此如果出现错误,则必须更改页面的网址。我的问题很简单:说你的页面是“http://localhost/Input/”,当你有一些错误时,我想重定向到“http://localhost/Input/Error”并显示错误信息。我不想为此使用会话,因此请不要告诉我这个link。基本上,我想要这样做是类似的事情:

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,但显然这是最好的选择,我已经将它用于我的问题。至于答案,我选择了DigBySwift的答案,因为如果您不想使用Session进行此类操作,那么这是最合乎逻辑的事情。

3 个答案:

答案 0 :(得分:4)

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

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

return RedirectToAction("Error", new { ErrorId = 4 });

public ActionResult Error(int errorId){ ... }

编辑:另一种选择(因为数据库写入读取会很昂贵)会将消息写入cookie,然后在重定向后检索它,然后删除cookie。这不是很好,我个人不会用这个。但如果您需要自定义消息,则可以选择。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我想建议另一种方式。我使用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');
    }
}