2011-11-30 54 views
6

Có thể chuyển thông số qua server.execute?Truyền tham số qua server.execute?

Fx. Tôi có trong site.asp một kịch bản IF của mình nơi tôi cần thực hiện functions.asp?a=something&id=123. Điều này có thể ?!

On site.asp:

dim id 
id = 123 

if b = "hi" then 
    server.execute("functions.asp?a=something&id=" & id) 
else 
    response.write("No way dude") 
end if 

On functions.asp

a = request.querystring("a") 
id = request.querystring("id") 

if a = "something" and cint(id) > 100 then 
    response.write("Yes way dude") 
else 
    response.write("No way dude") 
end if 
+0

Điều gì sẽ xảy ra khi bạn chạy mã của mình? –

+0

Lỗi máy chủ 'ASP 0173: 80004005' Ký tự không hợp lệ trong đường dẫn tham số trong phương thức MapPath --- Hoặc giống như ở Đan Mạch trên màn hình của tôi :) – Behrens

+0

Và không có tham số chuỗi truy vấn, điều gì sẽ xảy ra? –

Trả lời

5

Bạn không thể sử dụng chuỗi truy vấn trong Server.Execute, nó đề cập rõ trong official documentation.

Những gì bạn có thể làm là tốt hơn nhiều: bạn có thể truy cập trực tiếp biến id quy định tại site.asp bên functions.asp, và bạn cũng có thể khai báo và thiết lập một biến khác, a:

--site.asp:

dim id, a 
id = 123 
a = "something" 
server.execute("functions.asp") 

--functions.asp

if a = "something" and cint(id) > 100 then 
    response.write("Yes way dude") 
else 
    response.write("No way dude") 
end if 

Vì nó tạo ra toàn bộ "môi trường kịch bản" mới tập tin thực thi sẽ không có quyền truy cập vào các thuộc tính mã gọi, phương pháp hoặc các biến, chỉ để các thông số yêu cầu toàn cầu, phiên, vv

Với điều này trong tâm trí , tôi sợ cách đơn giản nhất xung quanh đang sử dụng biến Session để vượt qua giá trị giữa các trang:

Session("id") = 123 
Session("a") = "something" 

Và sau đó:

if Session("a") = "something" and Session("id") > 100 then 
    response.write("Yes way dude") 
else 
    response.write("No way dude") 
end if 
+0

Đó cũng là những gì tôi nghĩ. Nhưng nó chỉ đơn giản là không hoạt động. Tôi đã thử với các tên biến duy nhất để đảm bảo rằng biến không được ghi đè. Nhưng đó không phải là trường hợp. – Behrens

+0

Có thể vì nó là một server.execute bên trong một server.execute? – Behrens

+0

Ý của bạn là "không hoạt động"? Bạn gặp phải lỗi chính xác nào? Không bao giờ cố gắng lồng nhau 'Server.Execute' nhưng không thể thấy bất kỳ lý do nào tại sao nó không hoạt động. –

3

Câu hỏi này có thể là cũ và giải quyết, nhưng câu trả lời tốt nhất không đề cập đến tất cả mọi thứ, và có thông tin niêm yết rõ ràng trên Microsoft.com về nó:


Server.Execute Method

Các bộ sưu tập dưới đây và thuộc tính có sẵn để trang ASP thực hiện:

  1. biến Application, ngay cả khi chúng được đặt trong trang gọi.
  2. Thuộc tính phiên, ngay cả khi chúng được đặt trong trang gọi điện.
  3. Biến và thuộc tính máy chủ, ngay cả khi chúng được đặt trong trang gọi điện.
  4. Yêu cầu bộ sưu tập và thuộc tính, ngay cả khi chúng được đặt trong trang gọi điện. Dữ liệu này bao gồm Biểu mẫuQueryString dữ liệu được chuyển đến trang gọi điện.
  5. Bộ sưu tập và thuộc tính phản hồi. Tệp .asp được thực thi có thể sửa đổi tiêu đề HTTP. Tuy nhiên, như với bất kỳ tệp .asp nào, nếu tệp .asp được thực thi cố gắng sửa đổi các tiêu đề HTTP sau khi nó gửi một phản hồi tới máy khách, nó sẽ tạo ra một lỗi.

Như bạn có thể thấy, có 5 cách Microsoft gợi ý để vượt qua các biến thông qua một phương pháp Server.Execute. Trước khi tôi thấy điều này trên Microsoft, phương pháp ưa thích là Session, như câu trả lời hay nhất cho thấy, vì tôi thấy điều này trước thông tin trên Microsoft.com. Nhưng sau khi nhận thấy rằng QueryStrings có thể được chuyển từ trang trước, tôi sẽ phải nói nhịp đập này bằng cách sử dụng Session để chuyển các giá trị. Session sẽ là cần thiết nếu ứng dụng của bạn yêu cầu bạn thêm các biến vào trang thực thi.

Nhưng chuyển các biến, tôi sẽ nói QueryStrings và dễ áp ​​dụng nếu ứng dụng của bạn cho phép sự linh hoạt. Tôi chắc rằng bạn biết làm thế nào để sử dụng đã querystrings, nhưng trong ý nghĩa của việc sử dụng nó cho một phương pháp Server.Execute, bạn chỉ có thể làm điều này:

Xem xét việc ASP1.aspASP2.asp:

ASP1.asp bao gồm:

Server.Execute("ASP2.asp") 

ASP2.asp bao gồm:

Response.Write Request("id") 

Khi bạn gọi ASP1.asp?id=123 Bạn sẽ nhận thấy rằng ASP2.asp cũng nhìn thấy cùng một Querystring được truyền cho ASP1.asp, vì vậy nó sẽ viết 123 theo phản hồi của ASP1.asp.

Điều này phức tạp hơn nhiều so với việc sử dụng Session cho tác vụ.

0

Tóm lại: CÓ, bạn có thể sử dụng giá trị QueryString kết hợp với Máy chủ.Execute trong một trang hoặc ứng dụng ASP.NET.

Bạn có thể vượt qua các biến động trong một cuộc tranh luận QueryString lắp ráp trong thực hiện ASPX trang (page1.aspx), như sau:

Dim intExample1 As Int = 22 
    Dim strExample2 As String = "hello world" 
    Server.Execute("page2.aspx?number=" & intExample1 & "&string=" & Server.UrlEncode(strExample2)) 

Trong ví dụ này, page2.aspx sau đó có thể tham khảo và sử dụng các giá trị sau :

Request.QueryString("number") 
    Request.QueryString("string") 
+0

err, OP đang hỏi về 'cổ điển asp'. 'asp' <>' aspx'. toàn bộ công cụ khác, như xa như IIS là có liên quan. – frumbert

0

Tại sao không sử dụng #include thay vì server.execute?

Tôi đã tìm kiếm sự khác biệt và phát hiện ra rằng trong trường hợp đặc biệt này, sử dụng #include sự là giải pháp tốt nhất: https://en.wikibooks.org/wiki/Active_Server_Pages/Server-Side_Includes#What_it_Does

Bạn không cần một số biến quy định tại trang mẹ để được sử dụng trong con, vì vậy giải pháp của bạn có thể là:

dim id, a 
id = 123 
a = "something" 
if b = "hi" then 
    <!--#include file="functions.asp" --> 
else 
    response.write("No way dude") 
end if 

On functions.asp

if a = "something" and cint(id) > 100 then 
response.write("Yes way dude") 
else 
    response.write("No way dude") 
end if 

Ưu điểm:

  • Đơn giản là hành động giống như trang đó.
  • Sử dụng các biến xử lý thay vì Biến phiên.
  • Không hiển thị biến nội bộ trong URL chính.
+0

không bao gồm hoisted như tuyên bố biến mặc dù? – frumbert

+0

Vui lòng đọc phần "Có gì" trong liên kết ở trên, nó cho biết "Điều này cho phép bạn nhập nội dung của tài liệu khác vào tài liệu hiện tại. Điều này cực kỳ hữu ích khi sử dụng lại các khối phổ biến của mã ASP và HTML", trong trường hợp này các biến được khai báo trong tài liệu đầu tiên sẽ có sẵn trong tài liệu thứ hai. nó giống như bạn nhập mã chính nó và viết nó trong tài liệu đầu tiên –

+0

nhưng nó không giống như server.execute, trong đó có không gian bộ nhớ riêng của nó. Ngoài ra, hãy thử tạo một tệp có tên là 'run.asp' với nội dung: 'start: <% nếu false thì%><% else %><% end if %>: end' sau đó trong 'no.asp' có' response.write "no" 'và trong' yes.asp' có ' '.. bạn sẽ thấy rằng BOTH bao gồm thực thi, bất kể điều kiện nếu có. Vì vậy, họ được nâng lên. và bạn phải thoát ra khỏi asp để làm bao gồm; không hoạt động nội tuyến như bạn có – frumbert

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