2012-02-03 27 views
7

Tôi có trang web biểu mẫu web ASP.net, với biểu mẫu máy chủ trong trang chính vì tất cả các trang đều yêu cầu nó.ASP.net không điền hành động = "" của mẫu máy chủ khi được phát hành

Khi gỡ lỗi tham số action được điền vào thời gian chạy cùng với id, nhưng khi được triển khai trên máy chủ của tôi với IIS7 nó không xuất hiện ... nhưng vẫn hoạt động. Nó không gây ra các vấn đề về trang web, nhưng nó làm cho việc xác thực W3C HTML5 của tôi thất bại, vì nó cần được phổ biến.

nguồn gỡ lỗi:

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

Sống nguồn:

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

khai Form trong masterpage:

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

tôi biết toàn bộ thẻ form doesnt có ID/hành động được xác định vv, vì ASP cấu hình mặc định tại thời gian chạy và đó là tốt, mặc dù đối với một số lý do nó messes lên trên máy chủ của tôi. Tôi đã thử sử dụng các action="<% Path etc %>", để có được tên đường dẫn nhưng nó không hoạt động.

Tôi đang làm gì sai? Tôi có thiếu thứ gì đó hay chỉ là một thói quen xấu để sử dụng một biểu mẫu trong một trang chủ?

Cảm ơn.

Cập nhật

Ok, để giải quyết vấn đề này chỉ ra trong câu trả lời tôi chỉ thiết lập các Form.Action trên Masterpage Page_Load, cuối cùng đã nhận rằng ánh sáng màu xanh lá cây W3C!

Note: Tôi đang sử dụng Intelligencia Ổ ghi, nhưng bạn có thể kéo URL sử dụng 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

sẽ thay đổi nó từ '' để

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

+0

Thẻ máy chủ không xác định 'asp: Form'. – tutts

+0

'Page.Form.Action = Request.Url.ToString();' làm việc cho tôi, không có Intelligencia, bên trong Page_Load. – manafire

Trả lời

7

asp.net 4.0? Nếu có, đây là câu trả lời của bạn: http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770154; Nó không phải là một dễ đọc, và tôi không quen thuộc bản thân mình, vì vậy bạn có lẽ nên đọc nó và xem làm thế nào mà ảnh hưởng đến trang web của bạn.

+0

trông giống như culprite huh, sẽ làm việc vào ngày mai để kiểm tra xem nó ra, tuyệt vời mặc dù, cảm ơn. – tutts

+0

Rõ ràng là vấn đề, mặc dù phải vật lộn để điền vào thẻ đó. đã thử trên web.config, máy.cấu hình trong phần mô-đun IIS7, thêm thủ công thông qua dòng lệnh. Cơn ác mộng! – tutts

4

Tôi vừa thấy bài đăng của bạn có trải nghiệm giống hệt nhau. Theo tôi, đây là hành vi không trực quan do thiết kế sẽ gây nhầm lẫn cho phần lớn các nhà phát triển ASP.NET mới hơn đang cố gắng nắm bắt HTML5 tuân thủ.

Dù sao sau khi một số giả mạo vấn đề có thể được sửa rất dễ dàng bằng cách sử dụng phương pháp sau đây. Không cần phải giả mạo web.config - may mắn thay!

Trong trang Master, thêm đoạn này (hoặc trong trang mặc định mà vấn đề này phát sinh, nếu bạn không sử dụng một trang chủ)

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

Đã đi với "Page.Form.Action = Request.RawUrl" để xử lý các URL có chuỗi truy vấn. Cảm ơn bạn đã chỉ đường! – leqid

+1

Trong trường hợp ai đó gặp vấn đề này sau, câu trả lời của EvilDr là ALMOST đúng, nhưng thay vì sử dụng AbsolutePath bạn nên sử dụng AbsoluteUri, hoặc bạn sẽ mất các chuỗi truy vấn nếu bạn sử dụng chúng trong các trang của mình. Chỉ cần chạy vào bản thân mình ... –

+0

Có bạn khá chính xác. Câu trả lời được cập nhật. Nhà phát triển có thể sử dụng tham chiếu hữu ích này để kiểm tra xem thuộc tính nào sẽ sử dụng dựa trên các yêu cầu (http://www.codepal.co.uk/show/Using_RequestUrl_to_find_specific_parts_of_the_web_pages_address) – EvilDr

Các vấn đề liên quan