ASP.NET MVC Ajax删除Notmapped不能为null

时间:2018-03-05 10:48:44

标签: asp.net asp.net-mvc entity-framework asp.net-ajax

我在尝试删除值时遇到错误' s怎么回事。 我的应用程序有调查,他们与SurveyQuestions有一对多关系,与SurveyAnswers有一对多的关系。 CascadeOnDelete工作得很好但是当我尝试使用Ajax时它会发送错误

  

值不能为空。
参数名称:source

但是它完全删除了调查和相关的问题和答案,它只是以某种方式发送它是ajax的错误。

我的代码:

   public JsonResult DeleteSurvey(int id)
    {
        SurveyViewModel survey = Mapper.Map<Survey, SurveyViewModel>(_unitOfWork.SurveyRepository.GetByID(id));
        if (survey != null)
        {
            _unitOfWork.SurveyRepository.Delete(id);
            _unitOfWork.Save();
        }

        return Json(survey, JsonRequestBehavior.AllowGet);
    }

     $.ajax({
            type: "POST",
            url: "/Survey/DeleteSurvey",
            dataType: 'json',
            data: {Id: surveyID},
            success: function (response) {
                $("#myModal").modal("hide");
                alert("Survey Deleted");
                location.reload();
            },
            error: function (response) {
                alert("Error");
            },
            failure: function () {
                alert("Failed to upload");
            }

        })

更新:

了解有关错误的更多信息:

            <b> Exception Details: </b>System.ArgumentNullException: Value cannot be null.<br>Parameter name: source<br><br>

        <b>Source Error:</b> <br><br>

        <table width=100% bgcolor="#ffffcc">
           <tr>
              <td>
                  <code><pre>

Line 44:                     if (user != null)
Line 45:                     { 
<font color=red>Line 46:                     return Questions.Any(m =&gt;        m.Answers.Any(x =&gt; x.UserId == user));
</font>Line 47:                     }
Line 48:                     return false;</pre></code>

这是ViewModel中的那部分

[NotMapped]
        public bool CompletedByUser
        {
            get
            {
                var user = System.Web.HttpContext.Current.User.Identity.GetUserId();

                return Questions.Any(m => m.Answers.Any(x => x.UserId == user));
            }
        }

1 个答案:

答案 0 :(得分:0)

这是因为删除后Questions即将来临null,您可能需要对其进行实例化,使其不是null,但它中没有任何项目,或者您可以调整你的getter以考虑它的null状态以及:

   [NotMapped]
    public bool CompletedByUser
    {
        get
        {
            var user = System.Web.HttpContext.Current.User.Identity.GetUserId();

            return Questions == null ? 
                   false : 
                   Questions.Any(m => m.Answers!=null && m.Answers.Any(x => x.UserId == user));
        }
    }