Javascript 对控制器的Ajax调用会将您带到另一个页面,而不只是返回JSON

Javascript 对控制器的Ajax调用会将您带到另一个页面,而不只是返回JSON,javascript,jquery,asp.net,ajax,json,Javascript,Jquery,Asp.net,Ajax,Json,我使用的是jQuery,一种模式表单和MVC5 当我在模式框上单击ok时,下面的javascript应该对“companys/Createa”控制器进行ajax调用 它做得很好,代码运行并更新我的数据库-但是,当将JSON数据返回到ajax调用时,浏览器页面显示JSON数据-而不是按照javascript代码,并将新值添加到下拉列表中 返回数据的行是: return Json(new { Company = dbCompany, Error = string.Empty }); 有人能理解为什

我使用的是jQuery,一种模式表单和MVC5

当我在模式框上单击ok时,下面的javascript应该对“companys/Createa”控制器进行ajax调用

它做得很好,代码运行并更新我的数据库-但是,当将JSON数据返回到ajax调用时,浏览器页面显示JSON数据-而不是按照javascript代码,并将新值添加到下拉列表中

返回数据的行是:

return Json(new { Company = dbCompany, Error = string.Empty });
有人能理解为什么控制器不只是将JSON发送到ajax请求,而是发送到以下对象:

我怀疑这是我的javascript代码,但我正试图遵循asp.net网站上的示例:

谢谢你,马克

完整控制器代码为:

    [HttpPost]
    public ActionResult Createa([Bind(Include = "CompanyId,CompanyName")] Company company)
    {
        try
        {
            if (ModelState.IsValid)
            {
                db.Company.Add(company);
                db.SaveChanges();

                var dbCompany = db.Company.Where(g => g.CompanyName == company.CompanyName).SingleOrDefault();
                // **** Following line executes and sends back JSON data ****
                return Json(new { Company = dbCompany, Error = string.Empty });
            }
            else
            {
                string errMsg = "Something failed, probably validation";
                var er = ModelState.Values.FirstOrDefault();
                if (er != null && er.Value != null && !String.IsNullOrEmpty(er.Value.AttemptedValue))
                    errMsg = "\"" + er.Value.AttemptedValue + "\" Does not validate";
                return Json(new { Error = errMsg });
            }
        }
        catch (InvalidOperationException ioex)
        {
            if (ioex.Message.Contains("Sequence contains more than one element"))
                return Json(new { Error = "Value provided exists in DB, enter a unique value" });
            return Json(new { Error = "Internal Error with input provided" });
        }
        catch (Exception ex)
        {
            return Json(new { Error = "Internal Error with input provided" });
        }
    }
调用控制器的jQuery/Javascript是:

$(function () {
$('#companyDialog').dialog({
    autoOpen: false,
    width: 500,
    height: 250,
    modal: true,
    title: 'Add Company',
    buttons: {
        'Save': function () {
            alert("Save pressed");  // This alert never shows
            var createCompanyForm = $('#createCompanyForm');
            if (createCompanyForm.valid()) {
                $.post(createCompanyForm.attr('action'), createCompanyForm.serialize(), function (data) {
                    if (data.Error != '') {
                        alert("Error noted: " + data.Error);
                    }
                    else {
                        // Add the new company to the dropdown list and select it
                        $('#CompanyId').append(
                                $('<option></option>')
                                    .val(data.Company.CompanyId)
                                    .html(data.Company.CompanyName)
                                    .prop('selected', true)  // Selects the new Company in the DropDown LB
                            );
                        $('#companyDialog').dialog('close');
                    }
                });
            }
        },
        'Cancel': function () {
            $(this).dialog('close');
        }
    }
});

$('#companyAddLink').click(function () {
    var createFormUrl = $(this).attr('href');
    //alert(createFormUrl);
    $('#companyDialog').html('')
    .load(createFormUrl, function () {
        // The createCompanyForm is loaded on the fly using jQuery load. 
        // In order to have client validation working it is necessary to tell the 
        // jQuery.validator to parse the newly added content
        jQuery.validator.unobtrusive.parse('#createCompanyForm');
        $('#companyDialog').dialog('open');
    });
    //alert("finished click function");
    return false;
});
});
$(函数(){
$(“#公司对话框”)。对话框({
自动打开:错误,
宽度:500,
身高:250,
莫代尔:是的,
标题:“添加公司”,
按钮:{
“保存”:函数(){
警报(“按下保存”);//此警报从不显示
var createCompanyForm=$(“#createCompanyForm”);
if(createCompanyForm.valid()){
$.post(createCompanyForm.attr('action')、createCompanyForm.serialize()、函数(数据){
如果(data.Error!=''){
警报(“注意到错误:“+data.Error”);
}
否则{
//将新公司添加到下拉列表并选择它
$('#CompanyId')。追加(
$('')
.val(data.Company.CompanyId)
.html(data.Company.CompanyName)
.prop('selected',true)//在下拉列表中选择新公司
);
$(“#公司对话框”)。对话框(“关闭”);
}
});
}
},
“取消”:函数(){
$(this.dialog('close');
}
}
});
$('#companyAddLink')。单击(函数(){
var createFormUrl=$(this.attr('href');
//警报(createFormUrl);
$('#companyDialog').html('')
.load(createFormUrl,函数(){
//createCompanyForm是使用jQuery加载动态加载的。
//为了使客户端验证工作正常,有必要告知
//jQuery.validator解析新添加的内容
jQuery.validator.unobtrusive.parse(“#createCompanyForm”);
$('公司对话框')。对话框('打开');
});
//警报(“完成点击功能”);
返回false;
});
});

这是由于我按下Enter键,从而触发表单post,而不是我实际单击模式表单上的“保存”按钮

愚蠢的错误——但希望能帮助别人


谢谢,Mark

你提供的$post回调函数是否达到了?嗨,Vijay-你刚刚帮我解决了这个问题(或者至少让我意识到不是单击保存按钮不起作用——是我在模式框中键入内容时按enter键,而不是单击保存按钮——从而触发表单Post,而不是通过jQuery代码编程)!干杯!你不认为这是一个潜在的错误。你应该处理模型弹出窗口(即保存)默认操作的enter键:DYeah我同意-我想我必须添加一些代码来捕获它,并确保enter键触发按钮点击,而不是表单发布。有点痛苦,但我现在要用谷歌搜索它:)干杯Vijay