2010-02-24 26 views
5
giá trị

Setting trong kiểm soát html trong mã đằng sau mà không làm kiểm soát máy chủgiá trị Setting trong kiểm soát html trong mã đằng sau mà không làm kiểm soát máy chủ

<input type="text" name="txt" /> 
    <!--Please note I don't want put 'runat="server"' here to get the control in code behind--> 
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 

Mã đằng sau:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     //If I want to initlize some value in input, how can I set here 
    } 
} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    Request["txt"] // Here I am getting the value of input 
} 

Trả lời

11

Elements mà không được thiết lập runat = "server" được coi là văn bản thuần túy và được thu thập thành ít đối tượng Literal nhất có thể (một đối tượng giữa mỗi điều khiển trên máy chủ). Tôi cho rằng nếu bạn thực sự thực sự muốn, bạn có thể cố gắng tìm đúng đối tượng Literal (hoặc có thể LiteralControl) trong Page.Controls, và sửa đổi nó, nhưng tôi chắc chắn khuyên bạn nên chống lại nó.

Điều gì thật khủng khiếp khi thiết lập nó runat = "server"?

Và có, tất nhiên bạn cũng có thể sử dụng <% =%>. Embedded code blocks. Chúng được đánh giá ở thời gian Render, vì vậy nó sẽ tương đối an toàn để làm như vậy.

+3

runat = "máy chủ" dường như cũng thay đổi tên thành ví dụ: "ctl00 $ Main $ Cái gì đó" mà thực sự phá vỡ toàn bộ bài cho một hình thức mà nên đi nơi khác (ví dụ như PayPal). – Johncl

26

Câu trả lời này đến từ bộ nhớ, vì vậy tôi xin lỗi nếu nó hơi tắt.

Điều bạn có thể làm là sử dụng biểu thức nội dòng ASP.NET để đặt giá trị trong khi tải trang.

Trước tiên, thêm thuộc tính vào mã phía sau trang của bạn.

protected string InputValue { get; set; } 

Trong sự kiện Page_Load, đặt giá trị của thuộc tính.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.InputValue = "something"; 
    } 
} 

Cuối cùng, thêm một biểu thức inline trong đánh dấu trang của bạn như thế này:

<input type="text" name="txt" value="<%= this.InputValue %>" /> 

này sẽ cho phép bạn thiết lập giá trị của phần tử input mà không làm cho nó một thẻ server-side.

1
<input type="text" name="txt" value="<%= System.Web.HttpUtility.HtmlEncode(this.InputValue) %>" /> 
2

Thêm một biểu hiện trong trang của bạn như thế này:

<input class="field" id="locality" name="loc" value="<%= this.inputtypeCT %>"/> 

Thêm một tài sản trong code-behind của trang của bạn:

protected string inputtypeCT; 

Trong sự kiện Page_Load, thiết lập giá trị của thuộc tính:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.inputtypeCT = "test" 
    } 
} 
0

Thêm runat máy chủ

hoặc sử dụng Asp điều khiển như dưới đây

<asp:TextBox type="text" runat="server" class="demoHeaders" id="datepicker" ClientIDMode="Static" Text=""/> 

Ngoài ra hãy chắc chắn rằng bạn sử dụng ClientIDMode = "tĩnh" cho việc đặt tên của kiểm soát được trong clinet như như máy chủ.

Tận hưởng!

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