То, что вы хотите, это использовать обратный вызов 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]
к действию контроллера и верните данные JSON, которые содержат URL для перенаправления, потому что RedirectToAction()
не работает должным образом с обратным вызовом AJAX:
Действие контроллера
[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
обработки исключений и других вещей, не упомянутых здесь.