最近用vs2010開發的一個網站中,設置了默認頁爲default.aspx,但只輸入網站名的情況下,該頁面數據不能正常提交,後臺調試代碼發現並不執行。進一步發現,如果建立web應用程序時,不存在該問題。爲使輸入默認網站時能夠正常提交數據,增加了Form的Action屬性:
1: <form runat="server" action="Default.aspx" defaultfocus="username">
2: <ul>
3: <li runat="server" class="wrong" id="errorMsg" clientidmode="Static"> </li>
4: <li>用戶名:
5: <input type="text" class="wid" id="username" name="username" runat="server" tabindex="1"
6: clientidmode="Static" />
7: </li>
8: <li>密 碼:
9: <input type="password" class="wid" id="password" name="password" runat="server" tabindex="1"
10: clientidmode="Static" />
11: <a href="Account/RecoverPwd.aspx" class="pw">忘記密碼</a></li>
12: <li class="font12 mar">
13: <input name="persistentcookie" id="rpwd" type="checkbox" value="1" runat="server"
14: tabindex="1" clientidmode="Static" />
15: <label for="rpwd">
16: 記住登錄狀態</label>
17: </li>
18: <li class="mar">
19: <input id="login_img" type="image" src="images/login.gif" tabindex="1" onclick="return Login();" />
20: <span id="login_tip" style="display: none;">正在系統,請稍候...</span> </li>
21: </ul>
22: <hr style="height: 2px; 80%; border-top: 2px dashed #215FD2;" />
23: <div style="font-size: 14px; text-align: center;">
24: 還不是會員,<a href="Account/Register.aspx">現在註冊</a></div>
25: </form>
在添加了Action屬性後,可以正常顯示了,但當訪問該網頁中帶有查詢字符串時,因爲提交的網址是default.aspx,是沒有後面的查詢字符串的,會出現問題,如上面的頁面爲登錄頁面,如果在web.config中配置了登錄url後,在訪問需要登錄的頁面時,會在頁面後帶有查詢字符串的網址,如:http://localhost/CCUINCom/Default.aspx?ReturnUrl=%2fCCUINCom%2fmanagerCom%2fcustomizeCom.aspx。此時,當登錄完成後就不能返回原來的頁面。
爲了解決這一問題,在頁面加載時,指定form的Action屬性爲請求時的地址,如:
1: protected void Page_Load(object sender, EventArgs e)
2: {
3: //在只輸入網站不輸入頁面地址時,iis不觸發事件,不能正常登錄,
4: //因此,在form中添加了action=default.aspx後,使得因爲超時後返回該頁面所帶的returnUrl參數無效
5: //因此在頁面加載時,得到原始url並將form的action設置成原始地址,以保證正常跳轉
6: Form.Action = Request.RawUrl;
7: string returnUrl = Request.QueryString["ReturnUrl"];
8: if (IsPostBack)
9: {
10: ... ...
11: }
12: else
13: {
14: ... ...
15: }
16: }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
此時,可以正常返回登錄前的頁面了。爲此,又得到了一種Asp.net跨頁的方式,就是如上種設置form的Action屬性,經過實驗,頁面提交時會轉到相應的頁面,但會提示viewState驗證錯誤,設置頁面的參數,對視圖狀態不進行驗證就可以了,此時可以通過Request的forms屬性來訪問值 ,這就和asp環境下的方式有些類似了。