2011-01-28 4 views
1

Я довольно новичок в mvc и jQuery ... и для веб-разработки в целом на самом деле. Недавно я взял на себя контроль над сайтом, разработанным разработчиком, которого мы должны были отпустить, и используемый им элемент управления TreeView был изменен по причинам, по которым я не буду участвовать здесь. Но в основном мне нужно иметь возможность загружать ресурсы на событие click узла в treeview. Я знаю, как обрабатывать событие, но я не могу понять, как позвонить на мой контроллер mvc через jquery. Путь к функции контроллера мне нужно вызвать для загрузки ресурса/Resources/DownloadResource. Вот код для этого:Позвоните в mvc-контроллер с jQuery

 public ActionResult DownloadResource(string id) 
     { 
      var resource = 
       _resourceService.GetResourceQuery(new Specification<Resource>(r => r.ResourceId == new Guid(id))).FirstOrDefault(); 

     return new BinaryResult 
     { 
      FileName = resource.FileName, 
      ContentType = string.Format("application/{0}", Path.GetExtension(resource.FileName)).Replace(".", ""), 
      IsAttachment = true, 
      Data = System.IO.File.ReadAllBytes(resource.FilePath) 
     }; 
    } 

Я пытался что-то вроде $.post("/Resources/DownloadResourceLink", { id: value }); и когда я пошагово, все становится правильные значения, но не скачать. Любая помощь, безусловно, будет оценена!

ответ

0

Посмотрите на This В основном вы просто вызываете адрес действия MVC как свойство url вашей функции ajax.

0

Проблема может заключаться в том, как вы передаете идентификатор. По моему опыту, я должен добавить данные в URL (/ действие/контроллер/маршрута идентификатор)

$.post("/Resources/DownloadResourceLink/" + value); 

Если это не сработает, я бы убедиться, что content type вызов ожидает в правильный для типа загрузки.

Если это еще не сделано, то проблема может быть в сообщении.

Рекомендую взглянуть на $.ajax(). По умолчанию используется get, который вам может понадобиться для загрузки. Я не знаю, какой тип содержимого должен быть (вы должны иметь возможность сделать вывод, что из метода действия), но ваш вызов будет выглядеть примерно так.

$.ajax({ 
    url: '/Resources/DownloadResourceLink', 
    params: { id } 
}); 
2
<script type="text/javascript"> 

    $(document).keypress(function (e) 
    { 
     if (e.which == 13) 
     { 
      location.href = '@Url.Action("ActionName", "Controllername")'; 
     } 
    }); 

</script>