我想更好地了解新的参数设置为URL的问题,并通过检索
var ParaValue = Request.QueryString["parameterName"];
所以,如果我有一个URL:“HTTP://www.myWebsite.aspx用户名=爱丽丝”
我将通过例如检索以上
string uName = Request.QueryString["UserName"].ToString();
但如果我想改变值,例如,使用户名=“拉尔夫”
当按钮被按下时,有一个参数的“状态”,其保持参考至极按钮被按下状态的值是=“无”现在我想将其设置为img_button1。
我不是连送实际工作imgbutton ID
我努力的编码只是为了测试/参考
所以我可以知道我在事件中受Button1的特定事件的procidure reaquested阶段
当事件被triggerd img_button2
然后我想对子级的状态设置为“img_button2”等”
我做了我的研究之后(我不能标志着这里恳请给我交任何的答案)然后我测试我在遇到两种选择这个堆栈溢出页 :
第一个选项(艾哈迈德Mageed给)我已经测试工作得很好。 和可读性容易理解(因为我仍然记忆犹新到asp.net“招数”)
再其次annakata这是显着改善的方式方法,你实际上并不重定向到实现结果的答案 - 查询字符串修改
玩耍后,我已经desided遵循annakata的做法,并作出这样的使用也与修改查询字符串参数和值的redirerion选择一个辅助方法。
public void QuerStrModify(string CurrQS_ParamName, string NewQs_paramName, string NewPar_Value, bool redirectWithNewQuerySettings = false)
{
// reflect to readonly property
PropertyInfo isReadOnly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
// make collection editable
isReadOnly.SetValue(this.Request.QueryString, false, null);
// remove
this.Request.QueryString.Remove(CurrQS_ParamName);
// modify
this.Request.QueryString.Set(NewQs_paramName, NewPar_Value);
// make collection readonly again
isReadOnly.SetValue(this.Request.QueryString, true, null);
string FullUrl = Request.Url.AbsolutePath;
if (redirectWithNewQuerySettings)
{
Response.Redirect(string.Join("?", FullUrl, this.Request.QueryString));
}
}
我发现它的人具有与asp.net意识中相当少的经验,所以我张贴作为我的版本正确答案的,因为我看到了很大的帮助。 我希望这会帮助somoeone其他寻求相同的解决方案。
随意进一步完善它,因为我mentiond我不是一个成熟的人才..yet。
您可以使用HttpModule
public class SimpleRewriter : System.Web.IHttpModule
{
HttpApplication _application = null;
public void Init(HttpApplication context)
{
context.BeginRequest += new System.EventHandler(context_BeginRequest);
_application = context;
}
public void Dispose()
{
}
private void context_BeginRequest(object sender, System.EventArgs e)
{
string requesturl =
_application.Context.Request.Path.Substring(0,
_application.Context.Request.Path.LastIndexOf("//")
);
string[] parameters = requesturl.Split(new char[] { '/' });
if (parameters.Length > 1)
{
string firstname = parameters[1];
string lastname = parameters[2];
//Here you can modify your parameters or your url
_application.Context.RewritePath("~/unfriendly.aspx?firstname=" +
firstname + "&lastname=" + lastname);
}
}
}
链接: http://msdn.microsoft.com/en-us/library/ms972974.aspx
注册:
<configuration>
<system.web>
<httpModules>
<add name="SimpleRewriter" type="SimpleRewriter"/>
</httpModules>
</system.web>
</configuration>
链接: http://msdn.microsoft.com/en-us/library/ms227673%28v=vs.100%29.aspx
这里的问题是一个问题,“真理之源”。 该NameValueCollection中被暴露HttpRequest.QueryString公开查询字符串,不应该被修改,因为查询字符串被调用者提供。 如果应用程序具有用户名查询字符串参数,但它可能需要改变,例如用于测试,在可以得到,如果需要它形成交替源的方法包裹。 例如:
// A very simple container
public static class SystemInfo
{
// This would be an instance of QueryStringUserInfo
// by default but could be changed for testing.
public IUserInfo UserInfo
{
get;
private set;
}
}
// An interface that contains the user operations
public interface IUserInfo
{
string UserName { get; }
}
// Get the user name from the query string. This would
// be the default.
public class QueryStringUserInfo: IUserInfo
{
public string UserName
{
get
{
return Request.QueryString["UserName"].ToString();
}
}
}
// Get the user name from the query string. This would
// be the default.
public class TestUserInfo: IUserInfo
{
public string UserName
{
get
{
return "Foo";
}
}
}
因此,而不是直接调用查询字符串为用户名(或任何资料片),呼吁系统的系统信息的属性(可怕的名字,但你明白了吧)。 它允许的设置的源将被改变,例如,如果代码使用网页以外或用于测试。