0

我已经创建了一个电子学习系统,现在我正在尝试使用 Rustici 创建的 Javascript 库集成 tincanapi,我想知道是否可以从 MVC 控制器调用 javascript 方法。在 web 视图中,我使用以下代码创建 tincan 语句:

<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);
    }
4

2 回答 2

1

(现在)有一个 TinCan.NET 库,在这种情况下使用起来会更好。这样它就可以从你的控制器直接调用 LRS,而不是在 JavaScript 中从客户端调用。您可以在此处找到有关该库的信息:

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

有关其他库的列表,请查看:

http://tincanapi.com/libraries

于 2014-06-06T14:38:52.630 回答
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 调用。

于 2014-01-20T20:58:07.100 回答