IIS 中Asp.net網站輸入網站名默認頁提交問題解決

最近用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">&nbsp;</li> 4: <li>用戶名: 5: <input type="text" class="wid" id="username" name="username" runat="server" tabindex="1" 6: clientidmode="Static" /> 7: </li> 8: <li>&nbsp;&nbsp;&nbsp;&nbsp;碼: 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環境下的方式有些類似了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章