2012-02-03 7 views
7

ASP.net Webフォームサイトがあり、すべてのページに必要なように、マスターフォームにサーバーフォームがあります。リリース時にサーバーフォームのaction = ""が挿入されない

actionパラメータのデバッグ時に、実行時にidが表示されますが、IIS7でサーバーに展開すると表示されませんが、それでも動作します。それはサイトの問題を引き起こすわけではありませんが、W3C HTML5の検証は失敗します。

デバッグソース:

<form method="post" action="index.aspx" id="aspnetForm"> 

ライブソース:マスターページで

<form method="post" action="" id="aspnetForm"> 

フォームの宣言:

<form runat="server"> 
.. some divs 
</form> 

私はID /アクション定義さなどを持っているdoesntのformタグを知っている、なぜならASPは、実行時にデフォルトを設定し、何かの理由で私のサーバー上で駄目ですが、それはうまくいきます。私はaction="<% Path etc %>"を使用してパス名を取得しようとしましたが、動作しません。

私は間違っていますか?私は何かを見逃しているのですか?それとも、マスターページでフォームを使用するのは悪い習慣ですか?

ありがとうございました。この問題を解決するために

更新

[OK]を、私はちょうどマスターページをPage_LoadにForm.Actionを設定する答えで指摘し、最終的にはそのW3C緑色の光を持って!

:私はIntelligenciaリライタを使用していますが、あなたはRequest.Url

public partial class myMasterPage : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Form.Action = Intelligencia.UrlRewriter.RewriterHttpModule.RawUrl; 
    } 
} 
+0

は< 'に'

'からそれを変えるだろうASP:フォーム...> '助け? –

+0

不明なサーバータグ 'asp:Form'。 – tutts

+0

'Page.Form.Action = Request.Url.ToString();'は、Intelligenciaなしで、Page_Loadの中で私のために働いていました。 – manafire

答えて

7

asp.net 4.0を使用してURLを引くことができますか?もしそうなら、あなたの答えは:http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770154;それは簡単な読書ではない、私は自分自身に慣れていないので、おそらくそれを読んで、どのようにあなたのサイトに影響を見る必要があります。

+0

は、犯人のように見える、ハァッ、明日それをチェックアウトする作業になります、素晴らしいが、ありがとう、ありがとう。 – tutts

+0

問題を解決してください。ただし、そのタグを設定するのは難しいです。 web.config、マシンで試しました。configをIIS7モジュールセクションに追加し、コマンドラインで手動で追加します。悪夢! – tutts

4

私はあなたの投稿がまったく同じ経験をしているのを見ました。私の意見では、これは非互換ですby-designこれは、互換性のあるHTML5を把握しようとしている大多数の新しいASP.NET開発者に混乱をもたらします。

何らかの改ざんをしても、次の方法で問題を簡単に修正できます。 web.configを改ざんする必要はありません - ありがたいことに!マスターページで

、(マスターページを使用していない場合、またはこの問題が発生するデフォルトのページで)このスニペットを追加

Protected Sub Page_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender 
    If Not Page.IsPostBack Then 
     If Page.Form.Action = String.Empty Then 
      Page.Form.Action = Request.Url.AbsoluteUri 
     End If 
    End If 
End Sub 
+0

"Page.Form.Action = Request.RawUrl"を使用して、クエリ文字列を持つURLを処理しました。方法を指摘していただきありがとうございます! – leqid

+1

EvilDrの回答が正しいと思われる場合、AbsolutePathを使用する代わりにAbsoluteUriを使用するか、ページ内で使用するとクエリ文字列が失われます。ちょうどこの自分自身に遭遇した... –

+0

はい、あなたはかなり正しいです。答えが更新されます。開発者は、この便利なリファレンスを使用して、要件に基づいて使用するプロパティを確認することができます(http://www.codepal.co.uk/show/Using_RequestUrl_to_find_specific_parts_of_the_web_pages_address) – EvilDr

関連する問題