【问题标题】:ASP.NET - How to set optional field in ViewModel class?ASP.NET - 如何在 ViewModel 类中设置可选字段?
【发布时间】:2019-11-17 02:14:17
【问题描述】:

从事 ASP.NET 项目,我现在面临一个问题。

  • 前端数据
fruits = [
    {
        type: "First",
        size: 50,
        weight: 120,
        optionalParam1: "String",
        optionalParam2: 152
    },
    {
        type: "Second",
        size: 12,
        weight: 160,
        optionalParam3: "Another String",
        optionalParam4: 169
    },
    {
        type: "Third",
        size: 15,
        weight: 190,
        optionalParam1: "String for Third",
        optionalParam5: [1, 2]
    }
]

saleInfo = {
    param1: 12,
    param2: "string",
    param3: 150
}
  • ViewModel 类

public class FruitViewModel {
    public Dictionary<string, dynamic>[] fruits;
    public Dictionary<string, dynamic> saleInfo;
    public int total;
    public Dictionary<string, dynamic> prevInfo;
}

只想将此信息存储到sql server并从sql db中恢复它们。但我不确定为此使用 Dictionary 是否正确。

您能指导我如何接收此信息并保存到 sql 数据库吗? 另外如何从 sql db 中恢复这些信息并发送到前端?

PS。这里的 prevInfo 参数与 saleInfo 参数相同,但顾名思义,它是可选的。请求为空,只对响应有效。

【问题讨论】:

  • 前端数据是标准的 json 对象吗?

标签: asp.net json asp.net-mvc asp.net-core asp.net-web-api


【解决方案1】:

列表可以正常工作。

对于第一个,创建一个反映前端期望的类,例如:

public class FruitModel {
     public string type { get; set; },
     public int size { get;set; },
     //the rest of properties you want
}

然后你的 ViewModel 开始看起来像这样:

public class FruitViewModel {
    public List<FruitModel> fruits;

    //change the rest to match
    public Dictionary<string, dynamic> saleInfo;
    public int total;
    public Dictionary<string, dynamic> prevInfo;
}

List 将在前端序列化为 Array。您还需要进行一些操作,因为您的数据将被封装到一个持有者对象中。

如果您在名为 apiData 的变量中获取数据,那么您将使用 apiData.fruits 访问其余部分,例如,第一项是 apiData.fruits[0]。

如果您想让前端的工作更轻松,您所要做的就是将响应数据直接分配给您的变量,例如:

fruits = apiData.fruits;

那么就没有什么需要改变的了。

【讨论】:

    【解决方案2】:

    在 VB 中,当使用 EF 时,您可以通过添加来使某些类型的属性可选?到模型中字段定义的末尾(即使其可为空)。字符串不需要这个。 例如

            Public Property optionalparam1 As String
            Public Property optionalparam2 As Integer?
            Public Property optionalparam3 As String
            Public Property optionalparam4 As Integer?
    

    回复。可选参数 5,不确定数组和对象元素,我现在正在研究。祝你好运;)

    更新:数组就像字符串,它们是引用,所以总是可以为空,所以需要特殊处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多