2010-05-04 34 views
17

Tôi không biết nếu nó đã được hỏi trước đây, cũng không thể tìm thấy nó.Render asp.TextBox cho kiểu đầu vào html5 = "date"

Có thể kiểm soát loại văn bản đầu vào được hiển thị bởi một asp: TextBox không? Tôi muốn thay đổi nó để <input type="date">

bất cứ đề nghị hoặc ý kiến ​​được hoan nghênh, nhờ

Trả lời

0

Trên thực tế không có cách nào dễ dàng để ghi đè lên các loại thuộc tính trong standart asp: TextBox. Bạn simly có thể sử dụng một yếu tố đầu vào

Dưới đây là một ví dụ

<input type="date" id="Input1" runat="server" /> 

Hãy cho tôi biết nếu nó giúp ...

+0

Nhà thiết kế không cho phép loại đó! –

+0

không, thật không may nó làm tăng lỗi biên dịch –

+2

Vâng, bạn nói đúng. Một cách khác là kế thừa TextBox và ghi đè phương thức AddAttributesToRender (HtmlTextWriter writer). writer.AddAttribute (HtmlTextWriterAttribute.Type, "date"); –

3

Sau đây là cách tôi đã làm nó ... hy vọng nó sẽ giúp .. .

Thêm một mục mới vào dự án của bạn thuộc loại "JScript file", sau đó dán mã này trong:

var setNewType; 
if (!setNewType) { 
setNewType = window.onload = function() { 
    var a = document.getElementsByTagName('input'); 
    for (var i = 0; i < a.length; i++) { 
     if (a[i].getAttribute('xtype')) { 
      a[i].setAttribute('type', a[i].getAttribute('xtype')); 
      a[i].removeAttribute('xtype'); 
     }; 
    } 
} 

Bây giờ thêm dòng này vào trang aspx của bạn sau khi cơ thể thẻ (thay đổi tên tập tin vào bất cứ điều gì bạn gọi nó là ở trên!):
<script type="text/javascript" src="setNewType.js"></script>

Cuối cùng, thêm một cái gì đó như sau để mã của bạn đằng sau PageLoad (tôi sử dụng VB ở đây):

aspTxtBxId.Attributes("xtype") = "tel" ' or whatever you want it to be 

phần quan trọng trên là Attributes ("xtype"), vì nó đặt XTYPE thuộc tính trong html rendered cho "textbox", mà javascript sau đó tìm thấy. và sử dụng để thay thế thuộc tính "loại" gốc.

Chúc may mắn!
FJF

+0

Tôi nhớ rằng các phiên bản trước của IE (không chắc chắn về IE9) không cho phép thay đổi kiểu đầu vào thông qua javascript. –

1

Tôi đã đi tuyến đường xây dựng bộ riêng của mình là html5 inputs bằng cách tạo điều khiển tùy chỉnh. Tôi nhận được bàn phím tùy chỉnh trên iPad và iPhone cộng với mã hóa postback của các điều khiển asp.net thực sự. Nó làm việc cho dự án trong nhà của tôi, vì vậy tôi đã quyết định cấp phép cho toàn bộ bộ phần mềm để tiết kiệm cho người khác thời gian và sự cố khi thực hiện nó từ đầu.

Hy vọng điều này sẽ hữu ích!

29

Có một bản cập nhật cho NET framework 4 cho phép bạn chỉ định các loại thuộc tính

http://support.microsoft.com/kb/2468871.

Xem feature 3 đường xuống trang

Tính năng 3

cú pháp mới cho phép bạn xác định một điều khiển TextBox đó là HTML5 tương thích.Ví dụ, mã sau định nghĩa một điều khiển TextBox đó là HTML5 tương thích:

<asp:TextBox runat="server" type="some-HTML5-type" /> 
+3

Đó là tin tốt nhưng không phải tất cả chúng ta đều có thể nâng cấp ứng dụng cũ lên .NET 4. – styfle

+0

Điều này không hoạt động với IE10 – JoshYates1980

6

Nếu bạn không nhớ subclassing, bạn có thể làm điều này bằng overidding AddAttributesToRender

public class DateTextbox : System.Web.UI.WebControls.TextBox 
{ 
    protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer) 
    { 
     writer.AddAttribute("type", "date"); 
     base.AddAttributesToRender(writer); 
    } 
} 
2

tôi biết câu hỏi này là cũ, nhưng tôi đã gặp vấn đề tương tự trong một ứng dụng biểu mẫu web. Bạn cần phải sử dụng TextMode

Trong khi tài liệu nói rằng

Sử dụng thuộc tính TextMode để chỉ định cách điều khiển TextBox sẽ được hiển thị. Ba tùy chọn phổ biến là hộp văn bản một dòng, nhiều dòng hoặc mật khẩu.

Bạn cũng có thể sử dụng html5, ngày, giờ, số, v.v. được xây dựng trong Visual Studio 2012/2013.

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textmode(v=vs.110).aspx

+0

Đây là câu trả lời đúng. Tôi đã bị bệnh về các tin nhắn cảnh báo, và tôi ghét vô hiệu hóa cảnh báo. Tôi không biết tại sao tôi không nghĩ về textmode - tất nhiên MS không thể sử dụng tên thuộc tính bản địa. – Ripside

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