【问题标题】:Textarea not rendered for DataType.MultilineText未为 DataType.MultilineText 呈现 Textarea
【发布时间】:2013-04-12 12:17:28
【问题描述】:

我在 ASP.NET 4.5 Web 窗体 FormView 中有一个 EditItemTemplate。我在 FormView 上设置了 ItemType,所以我使用 DynamicControls 来显示和编辑字段。

<asp:FormView runat="server" ItemType="FooModel">
    <EditItemTemplate>
        <asp:DynamicControl runat="server" ID="message" DataField="Message" Mode="Edit" />
    </EditItemTemplate>
</asp:FormView>

这似乎可以正常工作,直到我在 ItemType 属性上设置 DataType 以使其成为多行,就像这样。

public class FooModel
{
    [DataType(DataType.MultilineText)]      
    public string Message { get; set; }
}

这仍然给了我一个标准的文本输入。有什么想法吗?

我可以通过使用来解决它

<asp:TextBox ID="Message" Text='<%# Bind("Message") %>' runat="server" TextMode="MultiLine" />

...但最好从我的属性的数据类型中推断出来。

谢谢

【问题讨论】:

  • 尽管如果我使用 asp:textbox 和 Bind() 来解决它,那么我会丢失其他可以正常工作的数据验证属性,Required,StringLength 等。

标签: webforms data-annotations model-binding asp.net-4.5 asp.net-dynamic-data


【解决方案1】:

您可以手动编辑动态数据字段模板。您需要做的就是在OnInitText_Edit.ascx 控件中进行以下检查:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    if(Column.DataTypeAttribute.DataType == DataType.MultilineText)
        TextBox1.TextMode =  TextBoxMode.MultiLine;
}

FieldTemplateUserControlColumn 属性为您提供有关模型属性元数据的所有信息。

【讨论】:

  • 我应该已经在我的项目中拥有 DynamicData\FieldTemplate 目录,还是需要添加它并根据需要创建控件?我有一个升级的项目,而不是一个新的 4.5 项目。
  • @JamesAntrobus 我认为您的项目中应该有DynamicData\FieldTemlates 文件夹。从新的动态数据项目模板复制它或使用 NuGet 包nuget.org/packages/DynamicDataTemplatesCS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多