如何在ASP.net MVC中没有会话的页面之间传递数据

时间:2010-06-11 18:15:56

标签: asp.net asp.net-mvc-2

我有一个应用程序,我想在没有会话的页面(视图)之间传递数据。实际上我想使用查询字符串将一些设置应用于所有页面。 例如,如果我的链接类似于“http://example.com?data=test1”,那么我想将此查询字符串附加到之后的所有链接,如果没有查询字符串,那么正常流程。

我在想,如果我们在Web应用程序的任何链接中获取查询字符串,那么可以设置一些可用于后续页面的应用程序级别用户特定属性。

谢谢, Ashwani

2 个答案:

答案 0 :(得分:2)

您可以使用

获取查询字符串
Request.Url.Query

并在指向其他页面的链接上发送。

以下是您如何查找和更改网页的想法:

public abstract class BasePage : System.Web.UI.Page
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)    
    {
        System.IO.StringWriter stringWriter = new System.IO.StringWriter();

        HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

        // now you render the page on this buffer
        base.Render(htmlWriter);

        // get the buffer on a string
        string html = stringWriter.ToString();

        // manipulate your string html, and search all your links (hope full find only the links)
        // this is a simple example of replace, THAT PROBABLY not work and need fix         
        html = html.Replace(".aspx", ".aspx?" + Request.Url.Query);

        writer.Write(html);
    }
}

我不建议怎么做,我认为你必须找到其他方法来避免操纵你所有的链接......

答案 1 :(得分:0)

我不知道你试图传递什么样的数据。因为对我来说,捕捉所有链接的想法听起来很奇怪。

无论如何,我相信您可能会发现 TempData 类可以在重定向之间传递数据

最后警告,小心TempData,它在MVC 1和2之间有所改变:
ASPNET MVC2: TempData Now Persists