保存更改功能无法正确更新数据库

时间:2019-01-23 21:14:22

标签: javascript c# asp.net ajax entity-framework

因此,我有一个按钮,该按钮触发javascript函数,该函数调用AJAX请求,并调用应更新数据库的actionresult。

JavaScript调用

function changeDepartment() {

    // Initiate and value variables,
    var id = $('#requestId').val();
    var user = $('#contactUser').val();
    // Bind variables to data object
    var data = { id: id }
    // Ajax call with data.
    $.ajax({
        url: '@Url.Action("changeDepartmentActionResult", "ManageRequestResearch")',
        type: "POST",
        dataType: 'json',
        data: data,
        success: function (data, textStatus, XmlHttpRequest) {

            var name = data.name;

            window.location.href = '@Url.Action("Index", "ManageRequestResearch")';
            $('#btn-input').val('');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert("responseText: " + jqXHR.responseText);
        }
    });
alert(data);

然后,我得到动作结果:

[HttpPost]
public ActionResult changeDepartmentActionResult(string id)
{
    var moadEntities = new MOADEntities();
    moadEntities.Configuration.AutoDetectChangesEnabled = false;
    var researchBusiness = new ResearchRequestBusiness(moadEntities);
    var request = researchBusiness.FetchRequestById(Convert.ToInt32(id));

    var directoryObject = GetActiveDirectoryObject(request.Requestor);
    var requstorDisplayName = directoryObject != null ? directoryObject.DisplayName : request.RequestorFullName;
    var researchRequestFileBusiness = new ResearchRequestFilesBusiness(moadEntities);
    var requestFiles = researchRequestFileBusiness.FetchFilesByRequestId(Convert.ToInt32(id));

    var viewModel = new ManageSelectedRequestResearchViewModel()
    {
        RequestDetails = request,
        RequestActivity = request.tbl_ResearchRequestActivity.Select(d => d).ToList(),
        Files = requestFiles
    };

    moadEntities.Configuration.AutoDetectChangesEnabled = false;


    if (request.GovernmentEnrollment == true)
    {
        request.GovernmentEnrollment = false;
        request.ManagedCare = true;
        moadEntities.SaveChanges();
    }
    else
    {
        request.ManagedCare = false;
        request.GovernmentEnrollment = true;
        moadEntities.SaveChanges();
    }

    return Json("Status changed successfully", JsonRequestBehavior.AllowGet);
}

根据我的观察,它返回正确的记录,正确进行更改,并击中Context.SaveChanges();。 调试时-我可以在进行保存更改之前看到值确实已更改,但是-在数据库内部,没有任何更改被保存。

此外,我检查了连接字符串是否有效。

任何想法可能是什么原因造成的? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

似乎您在修改实体时禁用了自动检测更改。

如果是故意的,则应告知上下文该实体已更改。

我假设$( document ).ready( function () { var _rules = { "first-name": function ( $owner ) { var val = $owner.val(); if ( !val ) return false; if ( val.length < 5 ) return false; return true; } }; //Validate here function validate(total_mark) { var mark = 0;//total mark //Read all input value, than check rules $( 'input' ).each( function () { if ( 'function' !== typeof ( _rules[this.id] ) ) return; var $owner = $( this ); var result = _rules[this.id]( $owner ); if ( !result ) { mark -= 1; $owner.next().removeClass( 'hide-first' ); return; } $owner.next().addClass( 'hide-first' ); mark += 1; return; } ); return mark; }; var $btn = $( 'button' ); //Register keyup event for all input var total_input = 1; $( 'input' ).on( "keyup", function ( e ) { e.preventDefault(); $btn.css( "display", "none" ); if ( validate() < total_input ) return; $btn.css( "display", "" ); } ); } ); 是从MOADEntities派生的。所以代替这个:

DbContext

我会尝试:

if (request.GovernmentEnrollment == true)
{
    request.GovernmentEnrollment = false;
    request.ManagedCare = true;
    moadEntities.SaveChanges();
}
else
{
    request.ManagedCare = false;
    request.GovernmentEnrollment = true;
    moadEntities.SaveChanges();
}