来自EF源的Web应用程序中的Scaffold DynamicData下拉列表

时间:2016-12-05 21:08:28

标签: asp.net entity-framework asp.net-dynamic-data

我想构建一个基本的插入表单,其中包含外键的下拉列表。

我似乎无法弄清楚如何做到这一点。在创建元数据时,所有MetaColumns都是MetaColumns类型,而没有MetaForeignKeyColumns类型 - 这意味着它为所有属性呈现文本框 - 并且没有下拉列表。

UIHints似乎无效。我首先使用实体​​框架代码。如何将这些文本框变为下拉列表?事实上,我认为没有创建MetaData属性(我可能在这里遗漏了一些东西)。

AddPermission.aspx (仅限表单)

<asp:FormView runat="server" ID="AddPermissionForm"
ItemType="Common.Models.tag_permission"  
InsertMethod="AddPermissionsForm_InsertItem" DefaultMode="Insert"
RenderOuterTable="false" OnItemInserted="AddPermissionForm_ItemInserted">
<InsertItemTemplate>
    <fieldset>
        <ol>

            <asp:DynamicEntity runat="server" Mode="Insert" EnableViewState="true" ></asp:DynamicEntity>


          </ol>
        <asp:Button class="btn btn-primary" runat="server" Text="Insert" CommandName="Insert" />
        <asp:Button class="btn btn-default" runat="server" Text="Cancel" CausesValidation="false"  OnClick="CancelButton_Click" />
    </fieldset>
</InsertItemTemplate>

tag_permission.cs (代码优先模型的一部分)

public partial class tag_permission
{
    [ScaffoldColumn(false)]
    public short tp_tag_permission_id { get; set; }

    //foreign key one
    public string tp_security_group_id { get; set; }

    //foreign key two
    public short tp_tag_id { get; set; }

    [Display(Name = "View")]
    public Nullable<bool> tp_vis { get; set; }

}

我可能不得不使用DynamicDataManager或其他东西,但我不知道在哪里可以找到如何或是否应该在此页面旁边使用该表格。

我还附上了屏幕截图,比较了我的网络应用中的Default_Insert.aspx.cs的渲染,以及一个基本的DynamicData网站 - 几乎从模板开箱即用。在下面的图片中,正在DynamicData / Default_Insert.ascx.cs中检查MetaTable Table属性。

后一个图像具有不完整的MetaTable属性。它具有DataContextType和DataContextPropertyName以及ForeignKeyColumnNames的空值。我真的很想在FormView上正确设置MetaTable

供参考:以下图片中的代码为

public partial class Default_InsertEntityTemplate : System.Web.DynamicData.EntityTemplateUserControl {
    private MetaColumn currentColumn;

    protected override void OnLoad(EventArgs e) {
        foreach (MetaColumn column in Table.GetScaffoldColumns(Mode, ContainerType)) {
            currentColumn = column;
            Control item = new DefaultEntityTemplate._NamingContainer();
            EntityTemplate1.ItemTemplate.InstantiateIn(item);
            EntityTemplate1.Controls.Add(item);
        }
    }
...

DynamicData网站 The dynamic data website has many MetaTable properties pouplated

我的网络应用程序 My web application has an incomplete MetaTable

1 个答案:

答案 0 :(得分:0)

这一部分有几个部分:

在启动时,我在global.asax

中注册了动态数据提供程序

Global.asax.cs / other

App.DefaultModel.RegisterContext(
             new Microsoft.AspNet.DynamicData.ModelProviders.EFDataModelProvider(() => new MyDbContext()),
             new ContextConfiguration { ScaffoldAllTables = true });

App.cs(我用来存储永久引用的静态类)

public static class App

  ...

   private static MetaModel s_defaultModel = new MetaModel();

   public static MetaModel DefaultModel
      {get{ return s_defaultModel; }}
}

然后在我想要获取元数据的页面上我可以做到这一点

ModelMetaTable meta = App.DefaultModel.GetTable( nameof(db.MyAwsomeName) );

然后设置元数据

MyAwesomeForm.SetMetaTable(table);

然后表单将呈现所有外键/导航属性,就像在动态数据网站中一样。

然后按照您的预期设置和填充ModelMetadata的所有属性 - 例如,DataContext和ForeignKeyName不再为null