在不使用QueryString的情况下寻找有关在页面之间传递变量的建议。像谷歌这样的网络抓取工具会抓住网址中的查询字符串。我正试图摆脱使用它。是否有另一种传递变量的建议方法?我考虑过使用会话变量,但这只是为了简单地将变量从一个页面传递给另一个页面,它们并不总是相同。有什么想法吗?
另一方面,我不能使用表格。我正在使用母版页,其中包含母版页中嵌入的表单以及内容页。除非microsoft更新它,所以你可以在一个页面上使用多个表单。
答案 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)
您可以使用以下其中一项:
答案 7 :(得分:0)
您的主页有文本框和按钮,如....
<asp:TextBox ID="input" runat="server"></asp:TextBox>
<asp:Button ID="Bt" runat="server" Text="Button" PostBackUrl="~/Getvalue.aspx" />
现在,您可以将TextBox
的值从上一页获得GetValue.aspx
<%=Request.Form["input"]%>
或
TextBox1.Text = Request.Form["input"]; (TextBox1 is in "GetValue.aspx" )