2014-01-20 4 views
0

Я создал систему электронного обучения, и теперь я пытаюсь интегрировать tincanapi с помощью библиотеки Javascript, которую создал Rustici, и мне интересно, можно ли вызвать javascript-метод с контроллера MVC. В вебе-просмотре создать консервную банку заявление, используя следующий код:Выполнение функции javascript с контроллера MVC

<script type="text/javascript" src= "@Url.Content("~/Scripts/tincan.js")"></script> 
var tincan = new TinCan 
(
    { 
     recordStores: [ 
      { 
       endpoint: "https://cloud.scorm.com/tc/V4FF9VBCSY/", 
       username: "myusername", 
       password: "mypassword" 
      } 
     ] 
    } 
); 
function AcceptFriend(fullName,emailAddress) 
{ 
    tincan.sendStatement 
    (
     { 
      actor: { 
       name: "@Model.User.Forename" + " @Model.User.Surname", 
       mbox: "@Model.User.Email" 
      }, 
      verb: { 
       id: "http://adlnet.gov/expapi/verbs/answered", 
       display: { 
        "en-US": "accepted a friend request from" 
       } 
      }, 
      target: { 
       objectType: "Agent", 
       name: fullName, 
       mbox: emailAddress 
      } 
     } 
    ); 
}; 

Этого код вызываются при щелчке на кнопке принимает запрос друга, который работает так хорошо, и так хорошо.

Но теперь я хочу отслеживать, когда пользователь загружает курс, конечно, я могу это сделать при представлении формы, но это не дает мне знать, была ли загрузка успешной, поэтому я подумал, что было бы лучше сделать эти вызовы на действие контроллера, если это возможно. Это можно сделать? Как я мог бы назвать подобные заявления тем выше в этом коде:

public ActionResult NewCampaign() 
    { 
     evm.GetCampaignTypes(); 
     evm.GetCampaignFormats(); 
     evm.GetCampaignTemplates(); 

     //Set ViewBag values. 
     ViewBag.UserID = evm.User.UserID; 
     ViewBag.NewMessageCount = evm.NewMessageCount; 
     ViewBag.PendingFriendRequests = evm.PendingFriendRequests; 
     ViewBag.NewFriendRequest = evm.NewFriendRequest; 
     ViewBag.NewFriendCount = evm.NewFriendCount; 
     ViewBag.UserForename = evm.User.Forename; 
     return View(evm); 
    } 

ответ

0

Можно вызвать только функцию Javascript из контроллера после возвращения. Например:

JavascriptResult MyAction() 
{ 
    // Declare the purpose of the action 


    // The Javascript function 
    return JavaScript("YourJavaScriptFunction"); 

    // If you need parameters passed 
    // return JavaScript(String.Format("YourFunction({0},{1}), paramter1, parameter2);" 
} 

В этом случае Javascript должен объявить функцию вы возвращаете, дополнительно можно передать любые параметры из действия в функцию, если это служит вашей цели.

Если вам нужно привязать данные от клиента к контроллеру, вам лучше всего использовать вызовы AJAX.

1

Существует (сейчас) библиотека TinCan.NET, которую лучше использовать в этом случае. Таким образом, он может сделать вызов с вашего контроллера непосредственно на LRS, а не делать это со стороны клиента в JavaScript. Вы можете найти информацию об этой библиотеке здесь:

http://rusticisoftware.github.io/TinCan.NET/

Для получения списка других библиотек проверить:

http://tincanapi.com/libraries

+0

Приветствие Брайана Я знаю об этом, как я активно агитировать, чтобы он обновлено :) – Jay