开发者

MVC Scorm sequencing Issue with regards to PartialView

I am working on a Scorm MVC project. Basically I need to update a partial view from a cs class file.

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Table of Contents Test</h2>
    <br />
    <div id="SCONavBar">
        <%  XElement item = (XElement) Model;
            String rootID = (String) ViewData["courseRoot"];
            String resource = (String) ViewData["resource"]; %>
        <button id="prev" onclick="javascript:NavigationRequest('', '<%: resource %>', 'previous');">Previous</button>
        <button id="cont" onclick="javascript:NavigationRequest('', '<%: resource %>', 'continue');">Continue</button>
        <button id="start" onclick="javascript:NavigationRequest('', '<%: resource %>', 'start');">Start Course</button>
    </div>
    <div id="scoContainer">
        <div id="treeContainter" style="display:inline-block; outline:black solid 1px; height:600px; width:300px; overflow:scroll; padding:2px;">
            <ul id="treeview">
                <% Html.RenderPartial("~/Views/Content/ActivityTreeUserControl.ascx", item); %>
            </ul>
        </div>
        <div id="contentContainer" style="vertical-align:top; display:inline-block; outline:black solid 1px;">
            <% Html.RenderPartial("~/Views/Content/ContentFrame.ascx"); %>
        </div>
    </div>
    <script type="text/javascript" src="../../Scripts/TreeView/TOCControlScript.js"></script>
    <script type="text/javascript" src="../../Scripts/TreeView/resizeFrame.js"></script>
    <script type="text/javascript" src="../../Scripts/Scorm/loungeScormMethods.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            startTree();
        });
    </script>    
</asp:Content>

Above is the code for my view. On first load it loads a table of contents partial view and an Iframe partial view. When clicking my personal Start, Cont and Prev buttons, an AJAX request goes through a sequencer and returns the link to the next piece of content and updates the source of the iframe in javascript. This works fine.

Javascript

function sendToFrame(source) {
window.frames.SCODisplay.location.href = source;

}

function NavigationRequest(id, resource, type) {
    var result = null;
    $.ajax({
        type: 'POST',
        url: '/Content/NavigationRequest/',
        data: {type : type},
        async: false,
        success: function (data) {
            result = data;
        }
    });
    if (result != null && result != "") {
        var source = "../Content/" + resource + "/" + result;
        sendToFrame(source, id)
    }
}

Now the content can sometimes be navigated via buttons internally to the content. The content calls an API wrapper which sends to a data model the fact that after it terminates a continue request must be followed. Which works ok.

Now my problem is that on terminate my systems knows that a continue request is needed, it figures out what the next piece of content is and its link. I need to find a way to update the source of iframe from here....

public static String Terminate() {
            //set entry to "" or resume, available to next learner开发者_开发技巧 session in current learner attempt
            //if exit is set to suspend via nav request suspend all then entry set to resume upon next attempt on activity
            //if exit anything other than suspend or no value set entry to ""
            //when exit = suspend - save cmi.suspend_data to session
            //decide whether to persist data
            //save info to db using entities then call commit()
            cocdType cmi;
            try {
                cmi = (cocdType)HttpContext.Current.Session["cmi"];
            } catch {
                return "false";
            }
            if (cmi.adlNavRequest != "_none_") {
                SeqObject seqObj = new SeqObject();
                seqObj.currentRequestType = SeqObject.type.Navigation;
                seqObj.data.Navigation = cmi.adlNavRequest;
                seqObj = loungeScormSeqNavHandler.SequencingProcess(seqObj);

                NEED TO FIRE OFF IFRAME CHANGE SOURCE FROM HERE
            }
            return "true";
        }

Does this make sense, any help is appreciated.


I have come up with a work around.

My terminate function returns the full link required for the iframe and in the original ajax call I have a simple if that determines if the result isnt true or false, blank or null then it must be a link then play with it from there. Then set result to true or false after.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜