在 MVC 中填充我的模型时出错“指定的强制转换无效”

本文关键字:转换 无效 填充 MVC 我的 模型 出错 | 更新日期: 2023-09-27 18:30:24

我有这个模型

 public class DocumentModel
    {   
        public int documentID { get; set; }
        public String Title { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
        public DateTime DateCreated { get; set; }
        public String Description { get; set; }
        public int authorID { get; set; }
        public String AuthorName { get; set; }
        public int categoryID { get; set; }
        public String Category { get; set; }
        public int topicID { get; set; }
        public String Topic { get; set; }
        [AllowHtml]
        public String DocumentBody { get; set; }
    }

当我在mysql中进行查询后即将填充我的模型时,这是代码

 result = from DataRow row in data.Rows
                         select new DocumentModel()
                         {
                             documentID = (int)row["document_id"],
                             Title = row["title"].ToString(),
                             DateCreated = (DateTime)row["date_created"],
                             Description = row["description"].ToString(),
                             AuthorName = row["AuthorName"].ToString(),
                             categoryID = (int)row["category"],
                             topicID = (int)row["topicID"]
                         };

我在类别 ID 和主题 ID 中出现错误,错误显示"指定的强制转换无效"。 我不知道我从哪里得到这个错误,我已经检查了所有数据类型是否正确,我确认它是否正确,你能给我建议吗? 我是否错过了一些错误实现的代码?

在我忘记这里是我的 MYsql 查询代码之前

select a.document_id,a.title,date(a.date_created) as date_created,a.Description,c.first_name as AuthorName,ifnull(e.category_ID, 0) as category, ifnull(d.ID,0) as TopicID from tbldocument a
Inner join tbldocumenttree b on a.document_ID = b.Document_ID
left join tblcategory e on b.category_id = e.category_id
Inner join tblauthor c on a.author_id = c.author_id
left join tbldocumenttree d on d.ID = b.parent

谢谢。

在 MVC 中填充我的模型时出错“指定的强制转换无效”

如果 row["category"](同样适用于 row["topicID"])在数据行中为 NULL,则可能会发生这种情况,因为您无法将 null 转换为不可为空的 int。我注意到你已经加入了你的tblCategory,因此NULL 是一个真正的可能性。

要么使用合并函数修复服务器(即强制任何 NULL 类别默认为 0),要么在尝试强制转换之前检查 row["category"]==DBNull.Value,或者确实使用 Int32.TryParse 并对类别 0 进行任何处理,等等。