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

Muh*_*tar 5 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" />
Run Code Online (Sandbox Code Playgroud)

代码背后:

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
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*ras 26

这个答案来自记忆,所以如果稍微偏离,我会道歉.

您可以做的是使用ASP.NET内联表达式在加载页面期间设置值.

首先,在页面的代码隐藏中添加一个属性.

protected string InputValue { get; set; }
Run Code Online (Sandbox Code Playgroud)

在这种情况Page_Load下,设置属性的值.

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

最后,在页面标记中添加内联表达式,如下所示:

<input type="text" name="txt" value="<%= this.InputValue %>" />
Run Code Online (Sandbox Code Playgroud)

这将允许您设置input元素的值而不使其成为服务器端标记.


Arn*_*ack 11

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

将它设置为runat ="server"有什么可怕的?

是的,当然你也可以使用<%=%>.嵌入式代码块.它们在渲染时进行评估,因此这样做应该相对安全.

  • runat ="server"似乎也将名称更改为例如"ctl00 $ Main $ Something",它实际上打破了应该转到别处的表单的整个帖子(例如PayPal). (3认同)