Javascript 对控制器的Ajax调用会将您带到另一个页面,而不只是返回JSON
我使用的是jQuery,一种模式表单和MVC5 当我在模式框上单击ok时,下面的javascript应该对“companys/Createa”控制器进行ajax调用 它做得很好,代码运行并更新我的数据库-但是,当将JSON数据返回到ajax调用时,浏览器页面显示JSON数据-而不是按照javascript代码,并将新值添加到下拉列表中 返回数据的行是: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 }); 有人能理解为什
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