0

我正在尝试参数化 .NET MVC3 中的 get 方法。假设我有一个 get 方法(简化):

[HttpGet]
public ActionResult Message(string message)
{
    ...
    return View(message);
}

还有一个 post 方法:

[HttpPost]
public ActionResult DoSomething() 
{
    ...
    return RedirectToAction("Message", new { message = ok ? "Done it" : "Nope" });
}

这样做的原因是我可能有很多不同的消息从各种不同的 Post 方法动态生成,我想在一个公共视图中显示它们。消息视图也很复杂,所以我想避免重复代码。参数化消息操作确实是完美的解决方案。

这很好用,除了一件事:消息字符串总是出现在 URL 中,这对用户来说看起来不是很好。最大 URL 长度等也存在潜在问题。

例如。http://www.domain.com/Controller/Message?message=Nope

我真正想要的是从 Get 方法返回带有正确消息的消息页面,然后还读取 URL:http: //www.domain.com/Controller/Message

有什么想法吗?谢谢

4

5 回答 5

2

您可以将消息存储在 中Session,然后在消息操作中将其从会话中删除。

于 2012-11-14T14:31:19.773 回答
2

正如 SLaks 所说,消息可以存储在服务器端,但Controller.TempDataSession.

于 2012-11-14T14:32:44.127 回答
1

为什么要重定向到操作?为什么不直接渲染该视图。如果您需要运行特定代码,您甚至可以拥有一个实现它并从它继承的基本控制器,这样您就不会重复自己。注意:您可以将Message视图保存在 Shared views 文件夹中,以便任何控制器都可以找到它。

public abstract class BaseController : Controller
{
     public ActionResult MessageView(string message)
     {
         ... some common logging functions or such...

         return View("Message",message);
     }
}

称为

public class FooController : BaseController
{
    [HttpPost]
    public ActionResult DoSomething() 
    {
        ...
        return MessageView( ok ? "Done it" : "Nope" );
    }
}
于 2012-11-14T14:39:05.767 回答
0

除了 Controller.TempData 之外,另一个可行的解决方案是使用 cookie。

于 2012-11-14T14:36:52.810 回答
0

我认为最好的方法是饼干。这种方法将帮助您保存应用程序的 RESTful。我的意思是没有服务器保存数据

于 2012-11-14T14:37:03.067 回答