我在这里很新,所以如果我做错了让我知道,好吗? 我在网络开发方面也很陌生。
我在ASP.NET中使用post方法遇到问题。
请不要介意按钮和方法的名称,好吗?我是巴西人,他们的名字都是葡萄牙语。
我有一个提交按钮,调用名为AdicionarCliente()的ng-click(Angularjs)方法。
查看
<div>
<input type="submit" class="btn btn-info" value="Salvar" ng-click="AdicionarCliente()"/>
</div>
的JavaScript
myApp.controller('AdicionarClientesController', function ($scope, $http) {
$scope.NomeCliente = "";
$scope.Telefone1Cliente = "";
$scope.AdicionarCliente = function () {
var promisse = $http.post("/app/AdicionarCliente/", { NomeCliente: $scope.NomeCliente, Telefone1Cliente: $scope.Telefone1Cliente })
promisse.then(function () {
window.location.href = "CadastroPet";
return false;
});
};
直到这部分才能正常运作。我点击提交按钮的所有时间都来到此处并在变量“promisse”中输入函数。
现在 - 问题在于:
控制器
[HttpPost]
public JsonResult AdicionarCliente(string NomeCliente, string Telefone1Cliente)
{
var db = new RexsoftEntities();
db.CLIENTES.Add(new CLIENTES() { NOME = NomeCliente,
TELEFONE1 = Telefone1Cliente});
db.SaveChanges();
var Clientes = db.CLIENTES.ToList();
return Json(Clientes, JsonRequestBehavior.AllowGet);
}
第一次点击提交按钮时,这里的代码会一直运行到代码的db.CLIENTES.Add部分 - 然后它不运行DB.SAVECHANGES(),也不运行其余的代码。它第二次像魅力一样工作。问题恰好发生在第一次提交命中。
由于控制器的返回没有正确发生,Javascript代码的最后部分也不会运行。这部分:
window.location.href = "CadastroPet";
return false;
任何人都可以帮助我吗?
(所有观点都在这个div里面
<div ng-controller="AdicionarClientesController">
)
更新
我删除了提交按钮的TYPE并输入了简单的按钮类型。它似乎现在正在运作。那我该如何提交表格呢?
答案 0 :(得分:0)
首先,根据EF最佳实践,尝试将db操作包装在using() { }
块中。因此你的控制器就像
[HttpPost]
public JsonResult AdicionarCliente(string NomeCliente, string Telefone1Cliente)
{
var Clientes = new CLIENTES();
using(var db = new RexsoftEntities())
{
var _Clientes = new CLIENTES()
{
NOME = NomeCliente,
TELEFONE1 = Telefone1Cliente
};
db.CLIENTES.Add(_Clientes);
db.SaveChanges();
Clientes = db.CLIENTES.ToList();
}
return Json(Clientes, JsonRequestBehavior.AllowGet);
}
其次,在javascript方面,你使用的是angularjs。 window.location.href不会以角度方式工作(请参阅this和this)。您必须使用$ window服务(来源:using angularjs $window service)或$ location服务(来源:using angularjs $location service)。另请避免使用return false;
。
在您的情况下,以下内容将有效。
promisse.then(function () {
$location.path('/CadastroPet');
});
答案 1 :(得分:0)
我删除了提交按钮的TYPE并输入了简单的按钮类型。它似乎现在正在运作。 我创建了另一种使用我提到的相同js脚本验证表单的方法。如果没有达到标准,我会返回一条消息和一条返回虚假陈述。