使用ASP.NET(C#)在不使用QueryString的情况下将变量从页面传递到页面

时间:2010-11-05 06:03:35

标签: c# asp.net

在不使用QueryString的情况下寻找有关在页面之间传递变量的建议。像谷歌这样的网络抓取工具会抓住网址中的查询字符串。我正试图摆脱使用它。是否有另一种传递变量的建议方法?我考虑过使用会话变量,但这只是为了简单地将变量从一个页面传递给另一个页面,它们并不总是相同。有什么想法吗?

另一方面,我不能使用表格。我正在使用母版页,其中包含母版页中嵌入的表单以及内容页。除非microsoft更新它,所以你可以在一个页面上使用多个表单。

8 个答案:

答案 0 :(得分:4)

您可以查看使用ASP.NET Routing(可以在没有MVC的情况下完成) - 然后您可以拥有包含数据但没有查询字符串的路径;就像这里的路径(实际上是MVC,但同样的逻辑适用)。

无法使用表单 - 您可以简单地使用jQuery或类似工具来动态创建表单。

答案 1 :(得分:2)

ASP.NET会话存储怎么样?

您可以将内容存储到一个页面上的会话中,然后从第二页上的内容中检索它。

您可以将可序列化的任何添加到会话存储中,它实际上就像一个美化的词典,例如:你可以使用任何字符串作为其密钥填充它,并使用相同的密钥在另一页上检索它。

见:

答案 2 :(得分:1)

有四种方法可以在ASP.Net页面之间传递数据。

其中两个已本地化为单个页面,因此有两个浏览器选项卡将具有不同的参数:

  • 使用查询字符串作为查询字符串参数(您不想要的)或使用路径(即路由,在不同的答案中描述);

  • 使用POST(表单)参数。这些对于网络抓取工具是不可见的;

其中两个跨越多个页面:

  • ASP.Net会话;

  • 缓存数据。

我认为您正在寻找的是POST(表单)参数。使用它需要您更改将这些参数传递给表单的页面中的链接。 Ruby on Rails通过提供一种通用机制来做这样的事情,在后台创建一个表单,并允许您传递POST参数而不实际创建表单。当我例如创建指向http://google.com的链接,方法设置为POST,它生成以下HTML:

<a href="http://google.com" onclick="
    var f = document.createElement('form');
    f.style.display = 'none';
    this.parentNode.appendChild(f);
    f.method = 'POST';
    f.action = this.href;
    var m = document.createElement('input');
    m.setAttribute('type', 'hidden');
    m.setAttribute('name', 'param1');
    m.setAttribute('value', 'value1');
    f.appendChild(m);
    f.submit();
    return false;">Google.com using POST</a>

我已将上面的内容格式化了一点,但是在HTML页面中,这将显示为一个长字符串.. document.createElement('input');直到appendChild允许您设置要传递的参数在下一页。

答案 3 :(得分:0)

听起来你想要使用Cookie。如果信息是安全的,您可以将值存储在数据库中,并将数据库记录的唯一ID存储在cookie中。

答案 4 :(得分:0)

如果您只是将信息从一个页面传递到另一个页面,则可以执行HTTP发布。如果您正在执行诸如登录用户之类的操作,那么您需要使用cookie和/或会话状态

答案 5 :(得分:0)

根据需要,您也可以使用应用程序状态,因为您可能猜测访问权限是所有用户/会话:

 Application.Lock();
 Entity e = new Entity("mine");
 Application["myVar"] = e;
 Application.UnLock();

答案 6 :(得分:0)

您可以使用以下其中一项:

  1. 会话
  2. 缓存
  3. ViewState(取决于您跨页面的重定向方式)
  4. 数据库
  5. 磁盘

答案 7 :(得分:0)

您的主页有文本框和按钮,如....

<asp:TextBox ID="input" runat="server"></asp:TextBox>
<asp:Button ID="Bt" runat="server" Text="Button" PostBackUrl="~/Getvalue.aspx" />

现在,您可以将TextBox的值从上一页获得GetValue.aspx

  1. 在aspx页面
  2. <%=Request.Form["input"]%>
    

    1. 在代码文件中
    2. TextBox1.Text = Request.Form["input"]; (TextBox1 is in  "GetValue.aspx" )