2009-04-02 20 views
7

Tôi đã ngày càng bị bệnh nhiều hơn về các id kiểm soát, cố gắng lấy dữ liệu của bạn trong các máy chủ (dựa trên các sự kiện phía máy khách). Tôi dường như dành nhiều thời gian hơn để chiến đấu với các điều khiển trong asp.net, rằng tôi nghĩ rằng nó mất nhiều thời gian hơn tôi đạt được bằng cách sử dụng nó.Lợi thế của việc chuyển từ ASP.NET sang bánh mì & bơ HTML/jQuery

Tôi đã suy nghĩ về việc sử dụng đồng bằng html/javascript với jQuery và dịch vụ web trả về dữ liệu cho json.

Điều duy nhất tôi nghĩ tôi sẽ bỏ lỡ từ biểu mẫu web là MasterPages, quản lý phiên, xác thực dựa trên đăng nhập cửa sổ và trình xác thực có thể (mặc dù chúng cũng có một số quirks). (Trong thực tế, webservices có lẽ không dành cho phiên và auth, nhưng tôi chưa bao giờ developped)

  • Có điều gì sai với cách Tôi đang nghĩ về điều này, hoặc cái gì đó tôi không nghĩ về?
  • Có điều gì trong asp.net rằng bạn nghĩ rằng tôi sẽ bỏ lỡ?
  • Có ai đã làm điều này trước đây và muốn chia sẻ kinh nghiệm không?

Xin lưu ý rằng tôi chỉ có sẵn Khung 2.0 để phát triển.


Edit: Các loại điều đem lại cho tôi những rắc rối trong asp.net mà làm cho tôi băn khoăn cho việc chuyển đổi:

Đây là một mẫu của một trang đem lại cho tôi những vấn đề.

Có một bảng cây (chính/chi tiết)

Bạn có thể chỉnh sửa các trường trên mỗi hàng con.

Khi bạn nhấn nút lưu, dữ liệu từ hàng nhóm phải được cập nhật (chỉ dữ liệu từ một lựa chọn, không sửa đổi trong cơ sở dữ liệu), như dữ liệu từ hàng con.

Tôi không muốn làm mới toàn bộ trang vì các bản ghi được hiển thị dựa trên các tiêu chí tìm kiếm.

The Master/Details được tạo bằng lặp

Đang cố gắng để cập nhật một bản ghi từ mã sau thực sự là kỳ quặc, và vẫn không có đầu mối về việc cập nhật màn hình.

Sử dụng jQuery và dịch vụ web, tôi đoán là tôi có thể cập nhật trực tiếp vào cơ sở dữ liệu, yêu cầu những gì tôi muốn được hiển thị và chỉ cập nhật bản ghi đó. Đây là loại điều khiến tôi tự hỏi liệu asp.net có đang cản đường tôi không.

 

________________________________________________________________________ 
| - Some    Details   About   Group   | 
|________________________________________________________________________| 
    |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| 
    | ChildRecord Some Editable Fields  SaveButton | 
    | ChildRecord Some Editable Fields  SaveButton | 
    | ChildRecord Some Editable Fields  SaveButton | 
    | ChildRecord Some Editable Fields  SaveButton | 
    |_______________________________________________________| 
________________________________________________________________________ 
| + Some    Details   About   Group   | 
|________________________________________________________________________| 
________________________________________________________________________ 
| + Some    Details   About   Group   | 
|________________________________________________________________________| 


Edit2: Tôi có vấn đề về ASP.NET không liên quan đến ajax. Có, tôi sử dụng jQuery để làm cho các giao diện năng động hơn như hiển thị/ẩn phần tìm kiếm khi không cần thiết và thu gọn chi tiết từ cây, nhưng đây là tất cả những gì tôi làm với nó.

Điều làm phiền tôi là nếu tôi muốn kiểm tra nút nào đã được nhấp vào trong ví dụ này, tôi phải sử dụng một số thủ thuật cảm thấy hơi run rẩy.

Nếu bạn muốn sử dụng hộp tổ hợp dữ liệu trong bộ lặp, bạn phải sử dụng codebehind để đặt giá trị đã chọn, sẽ rất đau khi truy xuất dữ liệu được chọn.

Tiếp theo, nếu bạn muốn kiểm tra dữ liệu nào đã được sửa đổi, bạn phải lưu dữ liệu trong khung nhìn, đọc dữ liệu từ tất cả các điều khiển trong bộ lặp, sau đó so sánh với dữ liệu để cập nhật. Đây là loại thứ làm tôi bận tâm với asp.net.

Trả lời

4

Bạn không phải từ bỏ mọi thứ, như MasterPages. Bạn có thể thử tắt ViewState, tắt EventValidation và sử dụng càng ít điều khiển ASP.NET càng tốt (về cơ bản - nếu một số chức năng có thể dễ dàng đạt được với XHTML, hãy viết nó dưới dạng XHTML). Bạn vẫn có thể sử dụng các điều khiển ASP.NET mà bạn cần chúng.

Tôi nghĩ rằng bạn không đơn độc. Sau hai năm làm việc với WebForms, tôi cũng cảm thấy mệt mỏi với họ và sau khi tôi phát hiện ra jQuery tuyệt vời như thế nào và nó hoạt động tốt như thế nào với các dịch vụ web, tôi đã thay đổi mô hình phát triển của mình. Tôi đang dần chuyển sang MVC ngay bây giờ, vì tôi thấy nó là giải pháp tối thượng, nhưng đối với một số ứng dụng khác (nhỏ và/hoặc nhắm mục tiêu 2.0) tôi chỉ cố gắng sử dụng ít điều khiển máy chủ hơn, loại bỏ ViewState, sử dụng nhiều hơn AJAX (dịch vụ web). Nó hoạt động tốt. Tôi muốn giới thiệu số Encosia của Dave Ward - bắt đầu với this article. Tôi thừa nhận nó đã mở mắt của tôi về một số cách khác để phát triển các ứng dụng web bằng cách sử dụng .NET Framework. Chúc may mắn!

+0

cảm ơn, liên kết tốt đẹp và mô tả tốt đẹp – Martin

3

Tôi nghĩ câu hỏi cơ bản để tự hỏi mình là:

Am I using the controls for what they've been designed to do?

Sau khi làm việc duy nhất với ASP.NET trong Framework 2.0, tôi đã tìm thấy tôi đã không phải đối phó với những vấn đề bạn đang mô tả. ASP.NET có thể là quirky có, nhưng chủ yếu là khi bạn sử dụng nó cho một cái gì đó khác hơn là nó đã được dự định. Trong trường hợp tùy chỉnh cán điều khiển điền vào niche một cách dễ dàng.

Edit:

rắc rối của bạn âm thanh như bạn đang cố gắng để thực hiện các kỹ thuật AJAX, tuy nhiên trong câu hỏi của bạn, bạn không đề cập đến việc sử dụng AJAX framework. Có một cái nhìn tại đó vì nó có thể có thể lấp đầy thích hợp của bạn.

+0

Theo ý kiến ​​của tôi, Kiểm soát phải đủ chung nên tôi thậm chí không nên tự hỏi mình câu hỏi mà bạn vừa đề cập đến. – Martin

+0

@Martin: Ditto. – NotMe

1

Tạo bảng trong JavaScript/JQuery cũng không phải là mã thanh lịch nhất. Vì vậy, tôi sẽ bỏ lỡ kiểm soát Repeater.

Ngoài ra, có giải pháp cho vấn đề ClientId.

Tôi có rất nhiều mã trong trang của tôi trông như thế này:

var myTextBoxId = '<% = MyTextBox.ClientID%>';

Nếu có một loạt các điều khiển tôi cần ID khách hàng cho tôi sẽ đặt chúng trong một đối tượng

var myControlIds = {MyTextBoxID: '<% = MyTextBox.ClientID%>'};

Một công việc khác là đặt các lớp css cụ thể trên điều khiển của bạn hoặc tên/giá trị thuộc tính tùy chỉnh.

Vì vậy textbox của bạn có thể là:

Và lừa cuối cùng của tôi là sử dụng "kết thúc với" công cụ tìm thuộc tính.

Vì vậy, JQuery của bạn, thay vì

$ ("# MyTextBox") // không làm việc vì id khách hàng mangalling

thay vì làm: $ ("[id $ = MyTextBox]")

này tìm kiếm 'id' thuộc tính của tất cả các điều khiển để tìm một với một giá trị kết thúc bằng "MyTextBox"

+0

>> Tạo bảng trong JavaScript/JQuery không phải là mã thanh lịch nhất. Vì vậy, tôi sẽ bỏ lỡ kiểm soát Repeater. bạn có thể sử dụng trình phân tích cú pháp mẫu phía máy khách như http://www.west-wind.com/weblog/posts/509108.aspx –

1

Đây có thể là một sự thay đổi mô hình, nhưng nếu bạn đang tìm kiếm thêm "bánh mì và bơ" và thoải mái khi làm việc mà không cần asp.net serv Kiểm soát er, Monorail có thể chỉ là một lựa chọn tốt cho bạn. Nó cho phép bạn những gì bạn đang tìm kiếm, trong khi trọng lượng nhẹ hơn nhiều, một kiến ​​trúc dựa trên MVC là tốt. Tôi sẽ khuyên bạn nên asp.net mvc nếu nó không cho hạn chế. Net 2.0 của bạn. Vì bạn bị hạn chế, Monorail có thể chỉ là một lựa chọn khả thi.

+0

Nó sẽ là một sự thay đổi mô hình, nhưng chắc chắn nó sẽ đưa Martin đến gần mục tiêu của mình hơn. –

5

Nếu được sử dụng đúng cách, các ứng dụng web ASP.NET và JavaScript/jQuery thực sự có thể khen nhau. Bây giờ tôi đã triển khai jQuery trong 3 ứng dụng web khác nhau và đang yêu thích từng phút của nó. Vì vậy, miễn là bạn sử dụng mỗi thành phần để sức mạnh của nó, bạn sẽ kết thúc được hạnh phúc với dự án cuối cùng.

Bạn đã đề cập cụ thể rằng ID kiểm soát đang gây ra sự cố, nhưng thực sự không phải là vấn đề lớn.

Javascript

document.getElementById("<%=this.MyObject.ClientID %>"); 

jQuery

$("#<%=this.MyObject.ClientID %>").... 

Trong ví dụ của bạn về một mối quan hệ con phụ huynh, bạn có thể dễ dàng xử lý chính xác những gì bạn đang thảo luận với ASP.NET và AJAX khuôn khổ với UpdatePanels.

+0

thời gian duy nhất có chút khó khăn là khi bạn muốn đặt tất cả mã js của mình vào một tệp bên ngoài. một cách xung quanh nó là để có được id của khách hàng trên trang và sau đó tham khảo đó từ các tập tin bên ngoài. –

+0

trên trang mã ban đầu: "var MyObjectClientID = <% = MyObject.ClientID%>" –

+0

trên tệp js bên ngoài: "document.getElementById (MyObjectClientID)" hoặc "$ (" # "+ MyObjectClientID)" –

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