服务器端ASP.net控件呈现为HTML TextArea

时间:2015-06-22 20:27:51

标签: asp.net validation custom-server-controls

我有一个服务器端控件,它呈现为< input type =“Something”>或< textarea>。代码不言自明:

public string Namespace
    {
        get { return nspace; }
        set { nspace = value; }
    }
    public string Model
    {
        get { return model; }
        set { model = value; }
    }

    public string Text
    {
        get { return text; }
        set { text = value; }
    }

    public string TextMode
    {
        get { return textMode; }
        set { textMode = value; }
    }

    public string _Type
    {
        get { return type; }
        set { type = value; }
    }

    public string Property { get; set; }

    protected override void RenderContents(HtmlTextWriter output)
    {
        output.AddAttribute(HtmlTextWriterAttribute.Id, Property.ToLower());
        output.AddAttribute(HtmlTextWriterAttribute.Name, Property.ToLower());
        output.AddAttribute(HtmlTextWriterAttribute.Type, _Type);
        if(!String.IsNullOrEmpty(Text))
            output.AddAttribute(HtmlTextWriterAttribute.Value, Text);            
        Type modelType = Type.GetType(string.Format("{0}.{1}", Namespace, Model));
        PropertyInfo propInfo = modelType.GetProperty(Property);
        var attr = propInfo.GetCustomAttribute<RequiredAttribute>(false);
        if (attr != null)
        {
            output.AddAttribute("data-val", "true");
            output.AddAttribute("data-val-required", attr.ErrorMessage);
        }
        //forces styles to be added to the control
        this.AddAttributesToRender(output);
        if (!String.IsNullOrEmpty(TextMode))
        {
            output.RenderBeginTag("textarea");
            output.RenderEndTag();
        }
        else
        {
            output.RenderBeginTag("input");
            output.RenderEndTag();
        }
    }

此控件旨在从数据模型中获取验证错误消息(而不是向每个文本框提供“data-val”和“data-val-required”)。 使用此代码很简单:

<ServerControlTag:ControlName Property="aProp" runat="Server" Model="MyModel" ID="txtSomething" />

其中呈现为输入类型=文本标记,以下呈现为textarea标记:

<ServerControlTag:ControlName Property="Description" runat="Server" Model="MyModel" TextMode="MultiLine" ID="txtDescription" class="message" />

我的问题是渲染textarea时我找不到任何属性来填充textarrea的文本。要在textarea中设置文本,我刚刚找到了以下语法:

<textarea ... > My Text Here </textarea>

然而,我不知道如何在我的服务器控件中实现它。即使我走在正确的轨道上,我也不知道。

1 个答案:

答案 0 :(得分:1)

您需要调用普通的outDate > ".sqltext(date("Y-m-d H:i:s", strtotime($data["inDate"])))." 方法在标记内写入文本。

请记住对文本进行HTML编码。