在代码后面的html控件中设置值而不进行服务器控制

时间:2010-02-24 11:38:00

标签: asp.net htmlcontrols

在代码后面的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
}

4 个答案:

答案 0 :(得分: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 :(得分:11)

未设置runat =“server”的元素被视为纯文本,并被收集到尽可能少的Literal对象中(每个服务器端控件之间一个)。我想如果你真的想要,你可以尝试在Page.Controls中找到正确的Literal(或者LiteralControl)对象,并对其进行修改,但我肯定会反对它。

设置runat =“server”有什么可怕的?

是的,当然你也可以使用&lt;%=%&gt;。 Embedded code blocks。它们在渲染时进行评估,因此这样做应该相对安全。

答案 2 :(得分:3)

在页面中添加一个表达式,如下所示:

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

答案 3 :(得分:1)

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