来自javascript的asp.net MVC调用控制器
有没有一种方法可以从视图中使用javascript从控制器调用insert函数 这是我的控制器:来自javascript的asp.net MVC调用控制器,javascript,asp.net-mvc,Javascript,Asp.net Mvc,有没有一种方法可以从视图中使用javascript从控制器调用insert函数 这是我的控制器: public ActionResult Update(int a, string b) { string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString; using (MySqlConnection con = n
public ActionResult Update(int a, string b)
{
string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr))
{
MySqlCommand cmd = new MySqlCommand("UPDATE MyTable SET a = @a WHERE b = @b ", con);
//cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@a", a);
cmd.Parameters.AddWithValue("@b", b);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
return RedirectToAction("Index");
}
这是我的javascript,它保存来自HTML的值
function SaveChanges() {
var a = document.getElementById("a").value
var b = document.getElementById("b").value
//TODO: pass the variables to the controller to perform insert query
}
任何建议或意见。TIA。您应该使用jquery Ajax POST方法来实现这一点。像这样的结构
function submit(){
var a = document.getElementById("a").value
var b = document.getElementById("b").value
$.ajax({
url: '/ControllerName/Update/'
dataType: 'text',
type: 'post',
contentType: 'application/json',
data: {
'a':a,
'b':b
},
success: function( data, textStatus, jQxhr ){
alert('success')
console.log(data)
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}
});
请试试这个:
function submit(){
var a = document.getElementById("a").value;
var b = document.getElementById("b").value;
$.ajax({
url: '/ControllerName/Update(ActionResult)/'
type: 'post',
contentType: 'application/json',
data: {
'a':a,
'b':b
},
success: function(data){
alert('success');
},
error: function(xhr, textStatus, error){
alert(xhr.statusText);
alert(textStatus);
alert(error);
}
}
});
您需要的是使用AJAX回调从客户端调用控制器操作,应该像下面的示例一样进行设置: JS函数
function SaveChanges() {
// input values
// the variable names intentionally changed to avoid confusion
var aval = $('#a').val();
var bval = $('#b').val();
var param = { a: aval, b: bval };
$.ajax({
type: 'POST',
url: '@Url.Action("Update", "ControllerName")',
data: param,
// other AJAX settings
success: function (result) {
alert("Successfully saved");
location.href = result; // redirect to index page
}
error: function (xhr, status, err) {
// error handling
}
});
}
[HttpPost]
public ActionResult Update(int a, string b)
{
string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr))
{
MySqlCommand cmd = new MySqlCommand("UPDATE MyTable SET a = @a WHERE b = @b ", con);
cmd.Parameters.AddWithValue("@a", a);
cmd.Parameters.AddWithValue("@b", b);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
// create URL and return to view
string redirectUrl = Url.Action("Index", "ControllerName");
return Json(redirectUrl);
}
然后将[HttpPost]
属性添加到控制器操作,并返回包含要重定向的URL的JSON数据,因为RedirectToAction()
不能与AJAX回调一起正常工作:
控制器动作
function SaveChanges() {
// input values
// the variable names intentionally changed to avoid confusion
var aval = $('#a').val();
var bval = $('#b').val();
var param = { a: aval, b: bval };
$.ajax({
type: 'POST',
url: '@Url.Action("Update", "ControllerName")',
data: param,
// other AJAX settings
success: function (result) {
alert("Successfully saved");
location.href = result; // redirect to index page
}
error: function (xhr, status, err) {
// error handling
}
});
}
[HttpPost]
public ActionResult Update(int a, string b)
{
string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr))
{
MySqlCommand cmd = new MySqlCommand("UPDATE MyTable SET a = @a WHERE b = @b ", con);
cmd.Parameters.AddWithValue("@a", a);
cmd.Parameters.AddWithValue("@b", b);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
// create URL and return to view
string redirectUrl = Url.Action("Index", "ControllerName");
return Json(redirectUrl);
}
请注意,这只是一个简单的示例,您可以通过try…catch
异常处理和此处未提及的其他内容来改进
控制器代码
.cshtml代码
您需要在submit按钮单击事件上调用
SaveChanges()
函数。基于您的参考代码,我必须将方法设置为GET,如果控制器端的方法是POST,那么在AJAX
方法中,您需要将方法类型GET更改为POST,您知道AJAX吗?顺便说一句,当通过Ajax调用时,从action方法返回重定向响应是没有意义的。只是有一点,我在网上看到了一些他们正在使用它的参考,但我正在努力如何将我当前的逻辑转换为它。没有关于错误的具体消息,但现在我返回到“错误”使用这个来捕获错误:错误:函数(xhr,textStatus,error){alert(xhr.statusText);alert(textStatus);alert(error);}使用try{}catch(exception ex){throw ex;}在控制器中,这样你就可以得到异常。即使我已经在我的控制器上设置了try catch,也看不到任何错误,但警报会弹出“not found”提示你需要更改表名,例如在表名MyTable
之前和之后使用tilt。我的sql就是这样处理的。试试这个