Вызов метода 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)...

к вашему контроллеру

Другие вопросы по тегам