2017-02-22 27 views
0

在我问这个问题之前,我甚至不知道我使用的是一个查询字符串(我对此如此无知,我有什么是其他一些令人困惑的StackOverFlow研究的结果)。这是一个参数,我通过超链接表达式从我的SSRS报告查看器传递给我的应用程序。它的工作原理和一切都很好,除非我想在之后从url中清除它。我想清除我的查询字符串后,使用它在页面加载c#

http://10.155.54.101/Update?CurrencyId=67 

而我正在页面加载时获取带有此逻辑的参数。

if (Request.Params["CurrencyId"] != null) 
    int CurrencyId = int.parse(Request.Params["CurrencyId"]); 

我成功地捕捉信息和填充asp.net控制它,但我想它提交更新后徘徊,从地址栏清除它现在(回传?)。

通过另一个堆栈溢出答案:Clear QueryString on PostBack,我试图通过下面的代码清除查询字符串。

Request.Params.Clear(); 

但我得到一个集合是只读的错误,这是在上面的堆栈溢出问题。所以我尝试使用System.Reflection以下面的代码更改集合的只读属性。

PropertyInfo Isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); 
       Isreadonly.SetValue(Request.Params, false, null); 
       Request.Params.Clear(); 

我不明白的错误,但没有被删除,所以我可能不会被正确引用,因为然而到底Request.Params作品的查询字符串。

有人可以用这个方向将我推向正确的方向吗?我很抱歉,我对此一无所知。

+0

你有一个特别的原因,为什么querystring是不可接受的?无论哪种方式都有很多有效的理由。只是好奇,它也可能指导这里的答案。 – secretwep

+0

我要完全诚实,我正在尝试排除一个我并没有真正理解的错误。我有一个更新页面的应用程序,更新我的数据库中的记录,它检索并更新记录就好了。我有一个SSRS报告,每条记录上都有一个超链接,可以进入我的更新页面,并使用记录的数据填充字段和下拉列表。但是,数据完全取决于准确性(尤其是对于多对多关系)。更新也不会发布。我读过其他帖子,查询字符串与他们的问题有关。 – David

+0

请原谅我,你的意思是“拉起_incompletely_”吗?有时查询字符串是从一个应用程序获取数据到另一个应用程序的唯一方式,并且这是一个GET操作。不过,我怀疑这个问题在别处。你有两个应用程序或只有一个控制。您的问题中的更多细节可能会帮助您获得答案。 – secretwep

回答

2

您不能只更改浏览器地址栏中的网址。您可以将浏览器重定向到没有查询字符串的URL,但是看到您如何使用该值来填充正在呈现的页面上的控件,这意味着您需要仍然需要该值。

当你说“它在提交更新后徘徊”时,你的意思是用户选择货币并用这个查询字符串重定向到页面?如果是这样,你可以将此操作更改为POST而不是GET?然后你可以把currencyId放在POST的主体中。如果你不能将它切换到POST,那么下面列出了一些想法。

如果您使用会话,您可以将currencyId存储在用户的会话中。但是,如果您需要在其他请求上使用此值,这样做才有意义;因为使用会话是一个重大决定,如果你可以保持你的网站无国籍,你应该。

就这么说,有两个可行的选择,让您的网站无国籍。如果您在将来的请求中需要此值,则可以将其存储在cookie中。如果你只需要这个请求,你可以让页面发布到没有查询字符串但带有POST主体中的值的URL。

相关问题