使用C#设置HTML输入文本框的显示文本

3
我在ASPX页面中有一个HTML输入框,如下所示:
<input id="txtID" runat="Server" type="text" />

现在我有一些用C#编写的代码,用于计算一个值,并且我想让该值显示在上面的文本框中。

我已经尝试过了

txtID.Value = Number.ToString();

并且

HtmlGenericControl ct = new HtmlGenericControl();
ct.InnerHTML = Number.ToString();
txtID.Controls.Add(ct);

但以上两种方法似乎都无法设置文本框的显示文本。
有人能帮我弄清如何完成此操作吗? 我不能使用。
<asp:TextBox />

编辑(带有正确答案): 我最初尝试的方法是正确的,即。

txtID.Value = Number.ToString();

罪魁祸首是 Placeholder 插件,它被调用并抹去了文本框中的值。希望这能对像我一样在这种小地方卡住的人有所帮助。

请尝试在您的输入中添加type="text"。 - Hadas
你的代码叫什么?为什么不能使用<asp:TextBox /> - Anders Abel
@Hadas 抱歉我之前没提到,但那已经包含在内了。 - Piyush
@AndersAbel 我们有一支设计团队已经创建了表单,还有一些后端开发人员正在填充数据。根据严格的指示,我们不能进行此操作。 - Piyush
@Hadas,对于HTML控件,txtID.Text属性不可用。只有当我拥有<asp:TextBox>控件时才能使用它。 - Piyush
显示剩余2条评论
3个回答

3
您可以在PageLoad或PageInit中注入JavaScript来更改控件的值。假设GetValueDummy()是用于计算值的方法,并且您正在使用jQuery。
您需要在Page.Load处理程序中向页面注入javascript。
protected void Page_Load(object sender, EventArgs e)
{
    var script = "$('#txt').val('" + GetValueDummy() + "');";
    ClientScript.RegisterStartupScript(typeof(string), "textvaluesetter", script, true);
}

在这段代码中,txt是您输入的标识符。
如果您没有使用jQuery,请将脚本变量的值替换为。
var script = "document.getElementById('txt').value = '" + GetValueDummy() + "';";

在某个时间点,你的页面将完全呈现并准备好发送给客户端。所以你不能直接从C#中修改它。你可以在这里了解更多关于页面生命周期的内容:http://msdn.microsoft.com/en-us/library/ms178472.aspx


这是我想要实现的一个非常好的方法。我刚刚找出了我的问题所在:它是一个Placeholer插件,清除了文本框中的值。 - Piyush

1

就像这样给出:

<input type="text" name="email" id="MyInput" runat="server" />

可以像这样访问:

string  MyInput= myTextBox.Value;

对于上面的回答感到抱歉:

这是修改后的内容:

this.Init += Page_Init;
this.Load += Page_Load;
protected void Page_Init(object sender, System.EventArgs e)
{
        createControls();
    }

    protected void Page_Load(object sender, System.EventArgs e)
    {
        if (IsPostBack)
        {
            setcontrolvalues();
        }
    }

    private void createControls()
    {
        TextBox txt1 = new TextBox();
        TextBox txt2 = new TextBox();
        txt1.ID = "txt1";
        txt1.EnableViewState = true;
        txt2.EnableViewState = true;
        txt2.ID = "txt2";
        PlaceHolder1.Controls.Add(txt1);
        PlaceHolder1.Controls.Add(txt2);
    }

    private void setcontrolvalues()
    {
        TextBox txt1 = null;
        TextBox txt2 = null;
        txt1 = (TextBox)(PlaceHolder1.FindControl("txt1"));
        txt1.Text = "text1";
        txt2 = (TextBox)(PlaceHolder1.FindControl("txt2"));
        txt2.Text = "text2";

这将设置输入控件的值属性,但不更改显示文本。已尝试过这种方法。 - Piyush
无论如何,@DonNetter,在我在这里提问之前,我在搜索解决方案时遇到了这段代码,尝试了实现但没有成功。感谢你的努力,伙计,非常感谢你在这里的帮助。如果你有更多的东西让我尝试,请告诉我。我会很高兴得到一个好的解决方案。 - Piyush
我已经为您转换了,但我不是C#专家,如果有任何错误请见谅。 - coder
@Piyush-感谢您的评论,如果我遇到这个解决方案,我会在这里分享,希望能帮到您。 - coder

0

做这个:

<input type="text" ID="txtID" runat="server" />

msdn声称以下内容是有效的:

<input 
    Type="Password|Text"
    EnableViewState="False|True"
    Id="string"
    Visible="False|True"
    OnDataBinding="OnDataBinding event handler"
    OnDisposed="OnDisposed event handler"
    OnInit="OnInit event handler"
    OnLoad="OnLoad event handler"
    OnPreRender="OnPreRender event handler"
    OnServerChange="OnServerChange event handler"
    OnUnload="OnUnload event handler"
    runat="server"
    />

如果它“不起作用”,问题可能不在标记中!


1
我并不是说明确给出类型是一个坏主意,但我不确定这会有所帮助。在没有指定类型的情况下,默认为“text”,所以这并没有什么区别。 - Mr Lister
@MrLister 完全正确。这并没有帮助。 - Piyush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接