2009-03-10 39 views
7

Chúng tôi đang cố gắng để thay đổi thuộc tính Action của mẫu ASP.NET chính trong trang chủ động.Làm thế nào để thay đổi thuộc tính Action của aspnetForm trên MasterPage động

Trang có nút radio, người dùng chọn một trong các tùy chọn và nhấp vào gửi, khi đăng lại, dựa trên lựa chọn thuộc tính hành động của Biểu mẫu sẽ được đặt và biểu mẫu sẽ được gửi lại tự động.

Chúng tôi đã cố gắng sử dụng JavaScript cho giống nhau.

document.forms[0].action = "option1.aspx"; 
document.forms[0].submit(); 

Nhưng điều này dường như không hoạt động, không ảnh hưởng đến thuộc tính hành động.

nếu chúng ta không sử dụng một trang chủ, điều này có thể đạt được một cách dễ dàng bằng cách sử dụng

this.Form.Action = "option1.aspx"; 
ClientScript.RegisterStartupScript(this.GetType(),"test1", 
    "document.form[0].submit();",true); 

Đáng buồn thay, chúng ta không thể loại bỏ các trang chủ .. bất kỳ gợi ý về cách này có thể đạt được ..?

Trả lời

5

Đây là điều mà tôi đã đọc ước gì họ đã không được thực hiện. Thẻ Form được mã hóa thuộc tính action của nó. Bạn phải sử dụng Bộ điều khiển để kiểm soát việc xây dựng của nó trong thời gian chạy. Tôi sử dụng nó đặc biệt là cho Viết lại URL, khi tôi yêu cầu URL postback là một URL viết lại mà tôi đã tạo. Scott Gu làm mã cho nó và bạn có thể tìm thấy nó ở đây:

http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule1.zip

Và địa chỉ cho bài viết:

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

+0

Nice. Chính xác những gì tôi cần. +1 – Neil

+0

+1 Hữu ích. Dựa trên điều này, tôi đã bỏ qua biểu mẫu dựa trên máy chủ và đã thực hiện một số HTML cổ điển. – JDB

0

Liệu các hình thức cần phải vượt qua các giá trị để kết quả trang? Nếu không, tại sao bạn không chỉ sử dụng Response.Redirect đến đúng trang? Ví dụ, giả sử bạn đang sử dụng một RadioButtonList gọi lstOptions:

protected void btnSubmit_Click(object sender, EventArgs ags) { 
     switch (lstOptions.SelectedValue) { 
      case "option1": 
       Response.Redirect("~/option1.apsx"); 
       break; 
      //etc 
     } 
} 

Nếu bạn phải vượt qua các giá trị tại sao bạn thậm chí gây ra một bài đăng lại ở tất cả? Có vẻ như bạn có thể thực hiện những gì bạn muốn bằng cách chỉ sử dụng javascript. Ví dụ giả sử mẫu của bạn được đặt tên Form1 và nút radio của bạn có một cái tên của tùy chọn:

<input type="submit" value="Submit" onclick="javascript:submitForm()" /> 

<script type="text/javascript"> 
    function submitForm() { 
     for (var i=0; i < document.form1.options.length; i++) { 
     if (document.form1.options[i].checked) { 
      document.forms[0].action = "option" + i + ".aspx"; 
      document.forms[0].submit(); 
     } 
     } 
    } 
</script> 
+0

vâng tôi cần để có được giá trị từ trang này .. vì vậy tôi chỉ không thể chuyển hướng .. tôi đã cố gắng sử dụng các phương án 2 nhưng không làm việc như vậy của nó quá .. cộng với tên của trang cho sự kiện hành động được thực sự tạo ra tại thời gian chạy chỉ .. vì vậy nó không phải là thẳng .. nhờ sự giúp đỡ mặc dù .. :) –

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