2012-02-03 11 views
7

Mam witrynę webform ASP.net, z formularzem serwera na stronie głównej, ponieważ wszystkie strony tego wymagają.ASP.net nie wypełnia działania = "" formularza serwera po wydaniu

Podczas debugowania parametru action jest zapełniany w środowisku wykonawczym wraz z id, ale po wdrożeniu na moim serwerze z IIS7 nie pojawia się ... ale nadal działa. Nie powoduje problemów z witryną, ale powoduje niepowodzenie sprawdzania poprawności W3C HTML5, ponieważ musi zostać wypełniona.

źródło Debug:

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

żywo źródło:

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

deklaracja Forma masterpage:

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

wiem tag formularz robi się ID/akcja zdefiniowana itp, ponieważ ASP konfiguruje ustawienia domyślne w środowisku wykonawczym i jest w porządku, chociaż z jakiegoś powodu na moim serwerze. Próbowałem użyć action="<% Path etc %>", aby uzyskać nazwę ścieżki, ale nie działa.

Co robię źle? Czy brakuje mi czegoś, czy też po prostu złą praktyką jest użycie formularza na stronie wzorcowej?

Dzięki.

Aktualizacja

Ok, aby rozwiązać ten problem zwrócił uwagę na odpowiedź po prostu ustawić Form.Action na Masterpage Page_Load, wreszcie, że W3C zielone światło!

Uwaga: Używam Intelligencia nagrywarka, ale można wyciągnąć URL przy użyciu 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

Czy zmieniając go z '

' na '< asp: Form ...> 'help? –

+0

Nieznany znacznik serwera "asp: Form". – tutts

+0

'Page.Form.Action = Request.Url.ToString();' pracował dla mnie, bez Intelligencia, wewnątrz Page_Load. – manafire

Odpowiedz

7

asp.net 4.0? Jeśli tak, oto Twoja odpowiedź: http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770154; To nie jest łatwa lektura, a ja sam nie jestem zaznajomiony, więc powinieneś ją przeczytać i zobaczyć, jak to wpływa na twoją stronę.

+0

wygląda jak winowajca huh, będzie jutro w pracy, aby to sprawdzić, wielkie znalezisko, dzięki. – tutts

+0

Zdecydowanie problem, chociaż walczy o wypełnienie tego tagu. wypróbowany w web.config, maszynie.config w sekcji modułów IIS7, dodając ręcznie za pomocą wiersza poleceń. Koszmar! – tutts

4

Właśnie widziałem, że twój post miał dokładnie to samo doświadczenie. Moim zdaniem jest to niezrozumiałe zachowanie w stylu, które przyniesie zamieszanie większości nowszych programistów ASP.NET próbujących uchwycić zgodny HTML5.

W każdym razie po pewnej ingerencji problem może zostać naprawiony bardzo łatwo za pomocą następującego podejścia. Nie ma potrzeby modyfikowania pliku web.config - na szczęście!

W stronę wzorcową, dodać ten fragment (lub w domyślnej strony gdzie powstaje ten problem, jeśli nie używasz stronę Master)

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

Poszedł z "Page.Form.Action = Request.RawUrl" do obsługi adresów URL z ciągiem zapytania. Dziękuję za wskazanie drogi! – leqid

+1

Jeśli ktoś natknie się na to później, odpowiedź EvilDr jest PRAWDA, ale zamiast używać AbsolutePath, powinieneś użyć AbsoluteUri lub stracisz ciągi zapytań, jeśli użyjesz ich na swoich stronach. Wpadłem na to sam ... –

+0

Tak, masz rację. Odpowiedź jest zaktualizowana. Programiści mogą skorzystać z tego poręcznego odnośnika, aby sprawdzić, której właściwości użyć na podstawie wymagań (http://www.codepal.co.uk/show/Using_RequestUrl_to_find_specific_parts_of_the_web_pages_address) – EvilDr

Powiązane problemy