Проблема секвенирования MVC Scorm в отношении PartialView - PullRequest
0 голосов
/ 06 января 2011

Я работаю над проектом Scorm MVC. В основном мне нужно обновить частичное представление из файла класса CS.

    <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>

Выше приведён код для моего просмотра. При первой загрузке он загружает частичное представление оглавления и частичное представление Iframe. При нажатии на мои персональные кнопки Start, Cont и Prev AJAX-запрос проходит через секвенсор и возвращает ссылку на следующий фрагмент содержимого и обновляет источник iframe в javascript. Это отлично работает.

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

Теперь содержимое может иногда перемещаться с помощью кнопок внутри содержимого. Контент вызывает API-оболочку, которая отправляет в модель данных тот факт, что после его завершения должен следовать запрос продолжения. Который работает нормально.

Теперь моя проблема заключается в том, что при прекращении работы мои системы знают, что требуется запрос продолжения, они выясняют, что представляет собой следующий фрагмент контента, и его ссылку. Мне нужно найти способ обновить источник iframe отсюда ....

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";
        }

Имеет ли это смысл, любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 января 2011

Я придумал обходной путь.

Моя функция завершения возвращает полную ссылку, необходимую для iframe, и в исходном вызове ajax у меня есть простой метод if, который определяет, является ли результат истинным или ложнымпусто или пусто, тогда это должна быть ссылка, а затем поиграйте с ней.Затем установите значение true или false после.

...