如何在VS2010 .NET 4.0动态数据网站中创建DropDownList

时间:2012-07-07 13:25:53

标签: visual-studio-2010 c#-4.0 drop-down-menu asp.net-4.0 dynamic-data

我是Visual Studio 2010 .NET 4.0动态数据的新手。现在我正在尝试为我的网站做一个简单的下拉列表(用C#编写)。

我有一个名为protocol的字段(如在TCP协议中)。我希望用户能够选择一个静态值。 在过去使用经典ASP和HTML的时候,我会使用类似这样的东西:

<form name=form1 method="POST" action="./insert.asp">
...
     <select name="PROTOCOL" size="1">
        <option value="https" selected>https
        <option value="sftp">sftp
        <option value="ftps">ftps
     </SELECT>
...
</form>

...然后在./insert.asp中处理数据库。

到目前为止,我已经在Visual Studio 2008(.NET 3.5)中找到了如何执行此操作的说明,但这在WS2010和.NET 4.0中不起作用: http://csharpbits.notaclue.net/2008/07/dynamic-data-and-field-templates-your.html

按照http://www.asp.net/web-forms/videos/aspnet-dynamic-data中的说明,我认为为了自定义字段,我需要

  • 在App_Code文件夹(MyService.cs)中为我的自定义代码创建文件。
  • 为我的MS-SQL表格(服务)创建一个“公共部分类”。

这是我的(¿可怜?)努力(App_Code / MyService.cs):

// MyService.cs
using System;
using System.ComponentModel.DataAnnotations;
using System.Web;
using System.ComponentModel;

   [MetadataType(typeof(serviceMetadata))]
    public partial class service
    {

    }

    public class serviceMetadata
    {
        [EnumDataType(typeof(ProtocolType))]
        public object protocol { get; set; }

    }

   public enum ProtocolType
    {
        https,
        sftp,
        ftps
    }

这构建正常,但运行结束时“ArgumentException未被用户代码处理/传入的值必须是枚举基础或枚举的基础类型,例如Int32。” \ DynamicData \ FieldTemplates \ Enumeration.ascx.cs -file中的消息。

帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

好的,既然没有人试图回答这个问题,我会试着回答我自己的问题。

在我看来,这个问题没有开箱即用的方法。但是,在我看来(如果我错了,请纠正我)这个问题有三种可能的解决方案:

  1. 更改数据库结构
    • 添加新表,其中包含协议并将其链接到服务表:
      • 添加包含这些字段的协议表。
        • protocols.id(int,Primary Key)
        • protocols.protocol(char(10))
    • 删除(删除)service.protocol -field
    • 添加service.protocols_id -field。
    • 建立关系:FK:service.protocols_id --references - &gt;&gt; PK:protocols.id
  2. 将service.protocol -field更改为numeric(int)

  3. 创建自己的FieldTemplate

    • 需要深入了解.NET 4.0,DynamicData,C#(或任何编程语言),数据上下文(=表示数据库实体的类)
    • 您可以右键单击... \ DynamicData \ FieldTemplates \ -folder,选择DynamicDataField,重命名为MyDropDownList,然后单击添加。
    • 有关此主题的更多信息:http://msdn.microsoft.com/en-us/library/cc488522.aspx
  4. 欢迎提出意见。