我创建了一个电子学习系统,现在我正在尝试使用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);
}
答案 0 :(得分:1)
在这种情况下,(现在)有一个最好使用的TinCan.NET库。这样它就可以从你的控制器直接调用LRS,而不是在JavaScript中从客户端调用它。您可以在此处找到有关该库的信息:
http://rusticisoftware.github.io/TinCan.NET/
有关其他图书馆的列表,请查看:
答案 1 :(得分: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调用。