保存时出错:指定的转换无效

时间:2019-05-05 20:39:06

标签: c# asp.net-mvc-5 entity-framework-6

我收到此错误:

  

值不能为空

我有一个引用多个模型的viewmodel。 可以看出,html帮助器是强类型的。 在控制器中的后期操作中,它接收viewmodel。 我在POST有多种情况, 一种情况是保存viewmodel中引用的(一个)表的某些字段, 其他情况下将某些字段保存到viewmodel中引用的(多个)表中

我添加了一个断点并跟踪了代码,ModelState不会返回任何空值,但是当调试器到达var sod_request = new SOD_REQUEST时,它不会进入代码块并抛出{{ 1}}错误,指的是我不想在第一种情况下将数据发布到的另一个模型的属性。

我使用万无一失的库在viewmodel中进行了验证。 我得到“值不能为空”的属性具有'Value cannot be null'验证属性

我发布了RequiredIfFalse的所有not null

在同一操作的Get方法中,我映射了所有模型的所有属性

SOD_REQUEST

}

我希望仅将我映射的属性保存到一张表中

为什么要求另一个模型中的字段具有值? 是因为我使用的是强类型视图吗?

3 个答案:

答案 0 :(得分:0)

当执行新代码行时,SOD_REQUEST将执行以下所有操作:

                WS_REQUEST_ID = TempData["SODRequestID"].ToString(),
                CREATION_DATE = DateTime.Now.Date,
                INITIATOR_ID = (Int32)TempData["InitiatorID"],
                INITIATOR_NAME = TempData["InitiatorName"].ToString(), //may remove later
                SERVICE_TYPE_ID = 1,
                INITIATOR_COMMENTS = vm.InitiatorComments,
                DELEGATED_EMPLOYEE_ID = vm.DelegatedTeamMemberId,
                IS_DELEGATED = vm.IsDelegated,
                REQUEST_STATUS = (Int32)CommonClasses.RequestStatus.DELEGATED

我猜测TempData [“ SODRequestID”]或TempData [“ InitiatorName”]为空。如果是这样,请轻松解决:

            WS_REQUEST_ID = TempData["SODRequestID"]?.ToString(),
            INITIATOR_NAME = TempData["InitiatorName"]?.ToString(), //may remove later

请注意?我加了。

答案 1 :(得分:0)

  var s_request = new S_REQUEST(
                    {
                        REQUEST_ID = TempData["SRequestID"].ToString(),
                        CREATION_DATE = DateTime.Now.Date,
                        INITIATOR_ID = (Int32)TempData["InitiatorID"],
                        SERVICE_TYPE_ID = 1
                    });

使用此方法是因为构造函数需要()括号

答案 2 :(得分:0)

您应该在分析数据之前检查是否为空

REQUEST_ID = (TempData["SRequestID"] != null)? TempData["SRequestID"].ToString() : TempData["SRequestID"], 

INITIATOR_ID = (TempData["InitiatorID"] != null)? Int32.Parse(TempData["InitiatorID"]):TempData["InitiatorID"],