2016-01-28 14 views
7

Tôi đang sử dụng, <base href="http://localhost:80/"> trong trang chủ của tôi cho địa chỉ cơ sở,asp DropDownList postback không làm việc trong bảng cập nhật khi sử dụng <base> url trong masterpage

bây giờ khi tôi đang sử dụng dropdownlist kiểm soát trên trang nội dung (nằm trong localhost:80/directory1/directory2) trong vòng bảng cập nhật, sự kiện selectedindexchanged không hoạt động.

tôi đã cố gắng để tìm ra, nhưng trong tab mạng của firefox console tôi thấy yêu cầu đó là tìm kiếm trang nội dung tại căn cứ url duy nhất mà là ở localhost:80/contenpage.aspx thay vì localhost:80/directory1/directory2/contenpage.aspx và đưa ra lỗi

Tài nguyên không thể tìm.

+0

bạn có đặt tự động khởi động thành true không? –

+0

vâng, tôi đã làm và nếu tôi nhận xét rằng thẻ cơ sở trong masterpage mọi thứ hoạt động tốt –

+0

http://stackoverflow.com/questions/11521011/why-base-tag-does-not-work-for-relative-paths ___ hãy kiểm tra nếu bài viết trên hoạt động. Có vẻ như nó có liên quan đến đường dẫn tuyệt đối và đường dẫn tương đối – user2846413

Trả lời

2

Các tình huống có liên quan được rằng hành động hình thức được thiết lập để một URL có liên quan trong ASP.NET theo mặc định:

<form id="ctl01" action="./webform1" method="post"> 
    <!-- ... --> 
</form> 

Nếu bạn sử dụng thẻ base, bạn thay đổi đường dẫn cơ sở mà trang sử dụng để giải thích URL tương đối. Trong trường hợp của bạn, các URL base trỏ đến một đường dẫn rõ ràng là không thể phân phát các trang của ứng dụng. Để khắc phục điều này, tôi sẽ xem xét lại liệu thẻ base là cần thiết hay không. Nếu có, nó phải trỏ đến một URL có thể phục vụ các trang của ứng dụng. Để thiết lập đường dẫn base đến con đường cơ sở của các ứng dụng tự động, bạn có thể sử dụng đoạn mã sau:

protected void Page_Load(object sender, EventArgs e) 
{ 
    baseCtrl.Attributes["href"] = new Uri(Request.Url, "/").OriginalString; 
} 

Là một công việc xung quanh nếu bạn cần phải giữ cho thẻ base như nó có, tôi đã cũng đã cố gắng để thiết lập các hành động form đến một URL tuyệt đối bằng cách tích hợp mã sau vào trang chủ:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Page.Form.Action = Request.Url.OriginalString; 
} 

này làm việc trong mẫu nhỏ của tôi để các trang có thể thực hiện các postBack thành công. Mặc dù biểu mẫu được đăng trở lại vị trí giống như không có thẻ base, có thể có một số tác dụng phụ vì các tài nguyên khác trên trang (ví dụ: CSS, tệp JavaScript và các loại tương tự) cũng có thể được tham chiếu với URL tương đối và do đó được lấy từ một vị trí khác. Vì vậy, tôi vẫn sẽ đề xuất đánh giá lại thẻ base trước khi sử dụng giải pháp này.

1

nếu bạn có một số thành phần asp với Autopostback = "true" và ClientIdMode = "Static", bạn phải sử dụng bộ ba!

như thế này:

<asp:UpdatePanel ID="upPrinceOffuce" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="myCustomDropdown" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:DropDownList ID="myCustomDropdown" runat="server" ClientIDMode="Static" AutoPostBack="true" 
</asp:DropDownList> 
    </ContentTemplate> 
</asp:UpdatePanel> 
1

Hãy thử specifiing url tuyệt đối trong hình thức của action.

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