0

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

我有一个名为协议的字段(如 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 中的消息。

帮助表示赞赏。

4

1 回答 1

0

好的,由于没有人试图回答这个问题,我会尝试回答我自己的问题。

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

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

  3. 创建您自己的 FieldTemplate

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

欢迎评论。

于 2012-07-12T10:34:47.877 回答