2010-02-24 33 views
5

設定值後面未做服務器控件設定值後面未做服務器控件在代碼的HTML控件

<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" /> 

後面的代碼:

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 
} 

回答

11

元素未設置RUNAT =「server」被認爲是純文本並被收集到儘可能少的Literal對象(每個服務器端控件之間的一個)。我想,如果你真的很想,你可以嘗試在Page.Controls中找到正確的Literal(或可能是LiteralControl)對象,並修改它,但我肯定會推薦它。

什麼是那麼可怕有關設置它的Runat =「服務器」?

是的,當然你也可以使用<%=%>。 Embedded code blocks。它們在渲染時進行評估,因此它應該相對安全。

+3

runat =「server」似乎也將名稱更改爲例如「ctl00 $ Main $ Something」實際上打破了應該到別處的表單(例如PayPal)的整個帖子。 – Johncl 2012-09-17 13:55:49

26

這個答案來自於內存,所以我道歉,如果這是稍微偏離。

你可以做的是使用ASP.NET內嵌式網頁的加載過程中設置的值。

首先,在頁面的代碼隱藏中添加一個屬性。

protected string InputValue { get; set; } 

Page_Load事件中,設置該屬性的值。

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

最後,在你的網頁標記添加內嵌表達式是這樣的:

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

這將讓你設置input元素的值沒有使它的服務器端代碼。

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

在頁面中添加一個表達式是這樣的:

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

在你的頁面的代碼隱藏添加的屬性:

protected string inputtypeCT; 

在Page_Load事件中,設定值的物業:

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

RUNAT服務器

或使用ASP控制像下面

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

另外,還要確保你使用的ClientIDMode =「靜態」控制的命名是在客戶爲例像服務器。

享受!

相關問題