2012-02-22 4 views
0

У меня есть страница с тегом изображения. Изображение, отображаемое тегом изображения, изменяется в зависимости от выбора изображения, сделанного во всплывающем окне. Следующие шаги, чтобы воспроизвести мои вопросы:Изменение изображения src через MVC 3 Действие

1. Click button on Main Page and display popup with selectable images 
2. Click any one image in popup to create selection 
3. Click "Associate" button in popup to begin association process 
    a. JQuery.post is called to "Associate" selected image to image in Main page 
     i. Code in the Controller is run and save the association in the database. 
    b. Upon success, the "success" function of the JQuery.post makes a call to an existing javascript function. 
     i. This function creates a string in the following format: "{Controller}/{Action}/{PrimaryId}/{SecondaryId}" 
     ii. In the function, the "src" of the image in the main page is set to the string created above. 
     iii. The change in "src" makes the code in the controller run which in turn returns the specified image. 
     iv. The popup is closed 

Для всех практических целей, код работает для раздражающего вопроса, независимо от браузера, изображение не обновляется после возвращения из контроллера с помощью процесса, описанного кроме выше (во время функции «Успех» JQuery.post).

Следует отметить, что если шаги «b.i» - «b.iv» выполняются без «JQuery.post» (т. Е. Только для получения данных изображения без предварительной ассоциации), изображение обновляется каждый раз. Код, используемый ниже (отредактированные - элементы в фигурных скобках являются держателями место)

ИЗОБРАЖЕНИЯ MODIFIED

<div id="divMenuItemMedia"> 
    <img id="imgMenuItemMedia" alt='someAlt' src='/{Controller}/{Action}/{InitialImageId}' /> 
</div> 

кнопку для вывода POPUP

<input type="button" id="btnModifyImage" name="btnModifyImage" class="t-button" value="Change Image" onclick="showImageChooser();" /> 

JAVASCRIPT ФУНКЦИИ

MAIN PAGE

function GetCurrentMediaItemsByIds(pId, iId) { 
     //$('#imgMenuItemMedia').load(function() { 
      //alert("Image updated"); 
     // }); 
     var imgMedia = document.getElementById("imgMenuItemMedia"); 
     var sourceUrl = '/{Controller}/{Action}/{pId}/{iId}'; 
     //$('#imgMenuItemMedia').attr("src", sourceUrl); 
     imgMedia.src = sourceUrl; 
     InImageSelectionMode = false; 
    } 

function showImageChooser() { 
     var url = '{Controller}/{DataGetterActionForPopup}'; 
     ShowPopup(url, "#MediaChooserDialog", null); 
    } 

POPUP

function associateMediaSelection(e) { 
    // The entity name is saved in hidden field in the "Edit" page 
    var entityName = document.getElementById("hidEntityName").value; 
    var contentPath = entityName + "/Associate" + entityName + "ToMediaItem"; 
    var url = '{Controller}/{Action}'; 
    var primaryId = {pId}; 
    var secondaryId = {sId}; 
    var entityId = {eId}; 
    var data = { "entityId" : eId, "primaryId": pId, "secondaryId": sId }; 

    var jqxhr = $.post(url, data, function (e) { 
       GetCurrentMediaItemsByIds(presentationId, document.getElementById("hid" + entityName + "Id").value); 

       closeMediaSelection(); 
      }); 
     } 
function closeMediaSelection() 
     { 
      var windowPopup = $("#MediaChooserDialog").data('tWindow'); 
      windowPopup.close(); 
     } 

Кто-нибудь есть идеи относительно того, что может препятствовать обновить изображение?

ответ

1

Im, предполагающий здесь, это полный, настоящий код. В этом случае:

 
var sourceUrl = '/{Controller}/{Action}/{pId}/{iId}'; 

будет проблемой, поскольку это ничего не значит в javaascript. Yon может вставить:

 
var sourceUrl = '@Url.Action("Action","Controller")' 

где Action и Controller заполнены именами вашего контроллера/действия.

+0

Как я упоминал в исходном вопросе «var sourceUrl = '/ {Controller}/{Action}/{pId}/{iId}'; является фальшивым, а текст внутри {} - это просто заполнители для реального текста в моем коде (необходимо, чтобы запутать что-то, чтобы не раскрывать, что такое мой код) – fuzzlog

+0

Кроме того, «var sourceUrl = '/ {Controller}/{Action}/{ Pid}/{IID} ';» это только результат, который видит клиент, фактический код действительно использует «@ Url.Action ..» и «@ Url.Content ....» по мере необходимости. – fuzzlog

+0

Извините, было довольно много деталей, чтобы попытаться отследить там выше –

Смежные вопросы