2016-02-05 3 views
1

У меня есть файл js, где я динамически меняю изображение src.MVC jquery image src Url.Content quotes issue

Это мой текущий код, который я пытаюсь:

$("#prodFront").attr("src", '@Url.Content("~/Order_Images/Campaigns/"' 
    + campaignKey + '"/"' + id + '"/General/front.png"")'); 

Мой образ на самом деле находится на месте:

Root folder/Order_Images/Campaigns/ 
765662bd-06ec-4925-8611-f147e232a124/1/General/front.png 

$("#prodFront").attr("src", 
'@Url.Content("~/Order_Images/Campaigns/ 
765662bd-06ec-4925-8611-f147e232a124/1/General/front.png")'); 

Но мой код всегда идет на месте, как

http://localhost:50209/BuyNow/Index/@Url.Content(%22~/Order_Images/ 
Campaigns/765662bd-06ec-4925-8611-f147e232a124/1/General/front.png%22) 

Я могу посмотреть изображение здесь:

http://localhost:50209/Order_Images/Campaigns/765662bd-06ec-4925-8611- 
f147e232a124/1/General/front.png 

Может кто-нибудь помочь с этими цитатами.

спасибо.

ответ

0

@Url.Content - это команда бритвы, которая использует C# для создания строки при вызове страницы. Вы не можете пройти в @Url.Content в качестве «динамического» значения, вам нужно будет вызвать Url.Content в вашем контроллере и передать его в javascript. Вот почему он подходит как http://localhost:50209/BuyNow/Index/@Url.Content(%22~/Order_Images/. Выполнение вызова Ajax на сервере будет таким, каким я мог бы с ним справиться.

$.ajax({ 
     url: Url.Content("GetImageUrlAction", "SomeController"), 
     data: {id = theImageYouWantsId}, 
     success: function(returnData){ 
       $('#prodFront').attr('src', returnData.imageUrl); 
      } 
    }); 

Тогда есть контроллер, как этот

public JsonResult GetImageUrlAction(string, campaginKey, string id){ 
    var imageUrl = Url.Content("~//Order_Images//Campagins//" + campaginKey + "//" + id + 
           "//General/front.png"); 
    return Json(new { imageUrl }); 
} 

Если базовый каталог не будет меняться, вы можете установить базовую переменную на странице загрузки, а затем просто добавить campaginKey и идентификатор позже

//Declare your variable on document ready 
$(document).ready(function(){ 
    baseUrl = '@Url.Content("~/Order_Images/Campaigns/")'; 
}); 

А потом в вашем JQuery вы можете добавить к нему

$("#prodFront").attr("src", baseUrl + campaginKey + "/" + id + 
"/1/General/front.png"); 
+0

Но если мы видим, этот ответ, мы можем иметь динамический URL http://stackoverflow.com/a/8266453/5610512 –

+0

@rohankoshti Я думаю, что я неправильно понял ваш вопрос. Вы хотите, чтобы изображение, которое изменяется на странице, или изображение, которое изменяется (потенциально) между страницами? –

+0

изображение будет меняться с помощью функции jquery. У меня есть два изображения с их эскизами .. и их динамическое число таких наборов. Нет изображений в одной кампании = нет наборов. У каждого набора есть изображение спереди и сзади продукта. Так что изменение dropdowon мне нужно как изображения изменились .. все с jquery –

1

В качестве campaignKey и id являются переменной JavaScript. Вы не можете использовать их с @Url.Content, так как он будет выполняться движком Razor на стороне сервера.

В качестве обходного пути вы можете сгенерировать URL-адрес с использованием заполнителя -1 и -2, которые используются для создания URL-адреса, который заменяется с помощью простой манипуляции с строкой.

//Generate URL 
var url ='@Url.Content("~/Order_Images/Campaigns/-1/-2/General/front.png")'; 

//Replace placeholder 
url = url.replace('-1', campaignKey).replace('-2', id); 

//Set image 
$("#prodFront").prop("src",url); 
+0

Эй @ Satpal, только что понял, что вторая половина моего ответа в значительной степени используется тем же методом, что и вы. Есть ли какая-то причина, по которой один или другой должен использоваться? Или это сводится к предпочтению? –