使用Javascript的ASP.NET web应用程序-正确填充数据库列

使用Javascript的ASP.NET web应用程序-正确填充数据库列,javascript,c#,asp.net,Javascript,C#,Asp.net,使用C#、Javascript和SQL Server 2017在ASP.NET中创建CRUD应用程序 数据库表有三列,Country、CountryCode和CountryCodeId,我试图用create函数填充它们(是的,我知道这里存在关系设计缺陷-这超出了问题的范围) 我有一个enum类,看起来像这样: public enum Country { [Description("Afghanistan")] AFG = 1, [Description(

使用C#、Javascript和SQL Server 2017在ASP.NET中创建CRUD应用程序

数据库表有三列,
Country
CountryCode
CountryCodeId
,我试图用create函数填充它们(是的,我知道这里存在关系设计缺陷-这超出了问题的范围)

我有一个
enum
类,看起来像这样:

 public enum Country
    {
        [Description("Afghanistan")] AFG = 1,
        [Description("Åland Islands")] ALA = 2,
        [Description("Albania")] ALB = 3,
    }
我在UI中有一个下拉菜单,显示国家的名称,如上面的
说明
部分所示。假设下拉列表的选择值是阿富汗。在执行create函数时,我需要用
Afghanistan
填充数据库的
Country
列,用
AFG
填充
CountryCode
列,用
1
填充
CountryCodeId

我的Javascript技能是最缺乏的,在这三个技能中,我只能使用
CountryCodeId
。这是我的JS代码-问号是我迷路的地方:

  async function newRecord(form) {
        var record = {};
        record.countryCodeId = $('#country').val();
        record.countryCode = $("???").val();
        record.country = $("???").val();
        var response = await fetch(`${endpoint}api/record`, {
            method: 'POST',
            crossDomain: true,
            cache: 'no-cache',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(record)
        });
编辑1:根据要求,这里是C#
插入
功能:

public bool Insert(Record record)
        {
            SqlConnection connection = new SqlConnection(_configuration.GetConnectionString("Production"));
            connection.Open();
            using (connection)
            {
                string query = "INSERT INTO [dbo].[Table]" +
                  "([Country]" +
                  ",[CountryCode]" +
                  ",[CountryCodeId]")
                  "VALUES " +
                  "(@Country" +
                  ",@CountryCode" +
                  ",@CountryCodeId")";
                return connection.Execute(query, record) > 0;
            }
        }
编辑2:

插入的控制器操作方法:

[HttpPost]
public JsonResult Insert(Record record)
{
    try
    {
        bool result = _repository.Insert(record);
        return new JsonResult(new OperationResult { Success = true });
    }
    catch (Exception ex)
    {
        return new JsonResult(new OperationResult { Success = false, Error = ex.Message });
    }
}
试试这个:-

using System.ComponentModel;
.
.
void ProcessCountry(string countryCode)
{
    Country country;

    // i.e. countryCode = "AFG"
    if (Enum.TryParse(countryCode, out country))
    {
        string description = null; 

        try
        {
            FieldInfo fieldInfo = country.GetType().GetField(country.ToString());
            DescriptionAttribute[] attributes = 
               (DescriptionAttribute[])
                   fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);

            description = ((attributes.Length != 0) ? 
                                attributes[0].Description : 
                                country.ToString());
        }
        catch (System.NullReferenceException)
        {
        }
        finally
        {
            if (string.IsNullOrEmpty(description))
            {
                description = "Unknown";
            }
        }

        int value = Convert.ToInt32(country);
        Console.Write($"countryCode: {countryCode}, description: {description}, value: {value}");
    }
}

FieldInfo/DescriptionAttribute内容将描述从System.ComponentModel.description属性中提取出来,并且当您已经给出了枚举值INT值时,您可以将它们解析为INT。

您可以发布“创建”函数吗?我猜这是某个控制器操作,它将更新数据库表,是吗?@sh1rts是的,好主意。后期编辑。插入时缺少结束部分。快速回答:您的枚举在js中不可用,因此只需提交id并在服务器上用C#填充其余的,您能显示您的表单以便我知道使用什么作为selector@GarrGodfrey谢谢,修正了。谢谢@sh1rts的代码。至于将其与我的项目联系起来,我将在何时何地调用
ProcessCountry
方法?这只是一个示例—重用您需要的东西。您可以发布JavaScript正在调用的控制器操作方法吗?(不是插入数据的方法)参见编辑2-这就是您所指的吗?