我正在重写一个ASP.NET应用程序并注意到行为上的差异......
在我的Page_Load事件中,我有一些代码,例如:
string id = Request["id"]
从URL获取id参数。在页面加载(即HTTP GET)上,这在两个版本中都按预期工作。我还有一个按钮onclick事件处理程序。显然,这会对服务器执行POST,并调用Page_Load处理程序。区别在于,在应用程序的原始版本中,id已成功从请求加载。在新版本的应用程序中,id返回null。我发现我需要使用Request.Params [“id”],但我很困惑为什么Request [“id”]适用于一个应用程序中的POST请求而不是另一个应用程序。
应用程序之间的唯一区别是第一个创建为文件 - >新网站和第二个文件 - >新的Web应用程序。我认为这是导致行为差异的原因,但我想知道为什么会出现这种微妙的差异,以及如果还有其他什么我应该注意到2之间。
任何建议都非常感谢。
答案 0 :(得分:0)
我总是使用Web应用程序项目,但区别在于编译。网站有一个动态编译,这意味着第一个请求将更慢,Web应用程序已预编译发布dll。
检查这个是专业人士和骗子:http://maordavid.blogspot.ca/2007/06/aspnet-20-web-site-vs-web-application.html
答案 1 :(得分:0)
正如您所提到的,您有两个id参数。这将是因为您在查询字符串参数中有一个,在表单参数中有一个。我不确定为什么会在一个网络应用中发生这种情况,而不是另一个,但您可以更改代码以更正确的方式对其进行说明。
如果您在浏览器中查看HTML的来源,您会看到表单的action
值将是当前页面URL,包括查询字符串。这就是第一个id被发送的原因。显然,第二个ID是通过表单本身传递的:
HTML基本网络表单来源
<form method="post" action="Default.aspx?id=3" id="ctl01">
<input type="text" name="id">
</div>
你可以在这里做几件事:
Page.IsPostBack用法示例:
protected void Page_Load(object sender, EventArgs e)
{
string id = string.Empty;
if (Page.IsPostBack)
{
id = Request.Form["id"];
}
else
{
id = Request.QueryString["id"];
}
}