0

我有ASP.NET 4.5 Web窗體FormView中的EditItemTemplate。我在FormView上設置了一個ItemType,所以我使用DynamicControls來顯示和編輯字段。Textarea未呈現DataType.MultilineText

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

...但它會更好,只是從我的屬性的數據類型來推斷。

謝謝

+0

雖然如果我使用asp:textbox和Bind()來解決它,那麼我會丟失其他數據驗證屬性,這些屬性工作正常,必需,StringLength等。 –

回答

0

您可以手動編輯動態數據字段模板。你需要的一切都是要讓接下來的檢查中Text_Edit.ascx控制OnInit:中FieldTemplateUserControl

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

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

Column屬性給大家介紹了模型屬性的元數據信息。

+0

我應該在項目中擁有DynamicData \ FieldTemplate目錄嗎?我需要添加這個並根據需要創建控件?我有一個升級的項目,而不是一個新的4.5項目。 –

+0

@JamesAntrobus我認爲你的項目中應該有'DynamicData \ FieldTemlates'文件夾。要麼從新的動態數據項目模板中複製它,要麼使用NuGet包http://nuget.org/packages/DynamicDataTemplatesCS/。 –