Вызов метода JsonResult на стороне сервера из JavaScript
Мне нужно вызвать следующий метод JsonResult:
JsonResult Delete(int pubId)
{
try
{
using (var ctx = new LibsysLiteContext())
{
var p = ctx.Publishers.Find(pubId);
var allPublisher = ctx.Publishers.ToList();
ctx.Publishers.Remove(p);
var total = allPublisher.Count();
return Json(new { success = true, data = allPublisher, total = total }, JsonRequestBehavior.AllowGet);
}
return Json(new RestResult { Success = true, Data = entity, Message = "Country has been deleted" }, JsonRequestBehavior.DenyGet);
return null;
}
catch (Exception e)
{
return Json(new RestResult { Success = true, Message = e.Message }, JsonRequestBehavior.DenyGet);
}
}
из функции js (deleteRows):
var deleteRows = function () {
Ext.Msg.confirm(
'Delete Rows', 'Are you sure?',
function(btn) {
if (btn == 'yes') {
var hh = Ext.getCmp('gg').deleteSelected();
ajax({
//action and controller
url: '@Url.Action( "Publisher", "Delete")',
data: { "Id": Id },
type: 'POST',
dataType: 'json',
});
}
});
};
который вызывается обработчиком следующей кнопки:
X.Button().ID("bntdelete").Text("delete").Icon(Icon.Delete).Handler("deleteRows();"),
Так не получилось! Как я могу перейти со стороны клиента на сторону сервера с помощью функции JavaScript?
2 ответа
Вообщем заходя на сервер [Direct Method]
от JS вы используете App.direct.<Method>();
Надеюсь, вы уже решили эту проблему, но в своем вызове ajax вы определяете тип как post, но то, что вы показываете на контроллере, устанавливается как get по умолчанию. вам нужно добавить
[HttpPost]
public JsonResult Delete(int id)...
к вашему контроллеру