jak jestem wciąż nowe do MVC 3 i jQuery, chciałbym wiedzieć, najlepszym rozwiązaniem praktyce, w jaki sposób można rozwiązać następujący:MVC 3, ponowne wykorzystanie częściowym widokiem i jQuery, bez sprzecznych DOM
I mieć widok, w którym używam jquery ajax do pobierania i wyświetlania częściowego widoku z niektórymi szczegółami produktu dla produktu A. Załadowany widok częściowy składa się z pakietu html i kodu jquery, który jest powiązany ze zdefiniowanym identyfikatorem w częściowym widoku.
Dlatego chciałbym ponownie użyć tego samego widoku częściowego, aby wyświetlić szczegóły z innych produktów w tym samym widoku (np. Wyświetlić szczegóły produktu B w wyskakującym oknie dialogowym). Za każdym razem, gdy zostanie wyświetlone okno podręczne, nowo pobrany widok częściowy będzie kolidował z widokiem częściowym dla produktu A, ponieważ te same identyfikatory są używane w html.
Czy istnieje sposób do hermetyzacji kodu HTML i JavaScript w częściowym widoku i używać go z kilku stron, bez obaw o jakiekolwiek konflikty z ID i rzeczy?
Mam nadzieję, że moje pytanie ma sens. Dzięki,
/Nima
AKTUALIZACJA
Oto pseudo kod, przedstawiając mój problem:
WIDOK
<script type="text/javascript">
$(document).ready(function() {
$('.productItems').click(function() {
var input = { productId: $(this).attr('data-productID') };
var url = url = '<%: Url.Content("~/ProductDetails/ShowProductDetails") %>';
// Show the modal box with product details
$('#dialogBox').dialog({
title: $(this).attr('data-productTitle')
});
// Fetch content in the background
$.get(url, input, function (result, response) {
$('#dialogBox').html(result);
});
});
});
</script>
<div id="detailsArea">
<% Html.RenderPartial("ProductDetails", Model.Product); %>
</div>
<div id="productLinks">
<span class="productItems" data-productID="123">Product B</a>
</div>
<div id="dialogBox" style="display: none;"></div>
Controller -> Akcja (ShowProductDetails)
public ActionResult ShowProductDetails(int productId)
{
// Get product from db. and return the partial view
return PartialView("ProductDetails", p);
}
częściowy widok (informacje szczegółowe)
<script type="text/javascript">
function SetProductTabContent(selectedTab) {
$("#productDescriptionContent > div").css('display', 'none');
switch (selectedTab) {
case '#tab-1':
$('#productDescriptionText').css('display', 'block');
break;
case '#tab-2':
$('#productSpecificationText').css('display', 'block');
break;
}
$(document).ready(function() {
// Get all the menu items
var menuItems = $("#productMenu a");
// Select the first tab as default
menuItems.first().addClass("menuItemActive");
// Handle the look of the tabs, when user selects one.
menuItems.click(function() {
var item = $(this);
// Get content for the selected tab
SetProductTabContent(item.attr('href'));
menuItems.removeClass("menuItemActive");
item.addClass("menuItemActive");
return false;
});
});
</script>
<div id="productMenu" style="">
<a href="#tab-1">
<div class="menuItemHeader">Menu1</div>
</a>
<a href="#tab-2">
<div class="menuItemHeader">Menu2 </div>
</a>
</div>
<div id="productDescriptionContent">
<div id="productDescriptionText" style="display: none;">
<%: Model.Product.Description %>
</div>
<div id="productSpecificationText" style="display: none;">
<%: Model.Product.Description2%>
</div>
</div>
WYDANIE Gdy częściowy widok zostanie załadowany dwa razy w DOM, konflikty DIV.
Co o pokazanie zawartości DialogBox w iframe? – Nima