Try your search with a different keyword or use * as a wildcard.
@model ProductModel
@inject IStoreService storeService
@using Nop.Core.Domain.Catalog;
@using Nop.Services
@using Nop.Services.Stores
@{
var stores = await storeService.GetAllStoresAsync();
}
@* resources for product tags input *@
<script src="~/lib_npm/jquery-tageditor/jquery.caret.min.js"></script>
<script src="~/lib_npm/jquery-tageditor/jquery.tag-editor.min.js"></script>
<link rel="stylesheet" href="~/lib_npm/jquery-tageditor/jquery.tag-editor.css">
<script asp-location="Footer">
$(function() {
@if (!Model.IsLoggedInAsVendor)
{
<text>
$("#@Html.IdFor(model => model.ShowOnHomepage)").click(toggleShowOnHomepage);
toggleShowOnHomepage();
</text>
}
$("#@Html.IdFor(model => model.ProductTypeId)").change(toggleProductType);
toggleProductType();
});
function toggleShowOnHomepage() {
if ($('#@Html.IdFor(model => model.ShowOnHomepage)').is(':checked')) {
$('#pnlDisplayOrder').showElement();
} else {
$('#pnlDisplayOrder').hideElement();
}
}
function toggleProductType() {
var simpleProductId = "@((int)ProductType.SimpleProduct)";
var groupedProductId = "@((int)ProductType.GroupedProduct)";
var selectedProductTypeId = $("#@Html.IdFor(model => model.ProductTypeId)").val();
if (!selectedProductTypeId || selectedProductTypeId == simpleProductId) {
$('#group-required-other-products').showElement();
$('#group-visible-individually').showElement();
$('#group-associated-products').hideElement();
$('[data-card-name=product-price]').showElement();
$('[data-card-name=product-shipping]').showElement();
$('[data-card-name=product-inventory]').showElement();
$('[data-card-name=product-giftcard]').showElement();
$('[data-card-name=product-downloadable]').showElement();
$('[data-card-name=product-rental]').showElement();
$('[data-card-name=product-recurring]').showElement();
} else if (selectedProductTypeId == groupedProductId) {
$('#group-required-other-products').hideElement();
$('#group-visible-individually').hideElement();
$('#group-associated-products').showElement();
@if (Model.Id > 0)
{
<text>updateTableWidth('#associatedproducts-grid');</text>
}
$('#@Html.IdFor(model => model.VisibleIndividually)').prop('checked', true);
$('[data-card-name=product-price]').hideElement();
$('[data-card-name=product-shipping]').hideElement();
$('[data-card-name=product-inventory]').hideElement();
$('[data-card-name=product-giftcard]').hideElement();
$('[data-card-name=product-downloadable]').hideElement();
$('[data-card-name=product-rental]').hideElement();
$('[data-card-name=product-recurring]').hideElement();
}
//templates
var productTypeSupportedValues = {};
@foreach (var kvp in Model.ProductsTypesSupportedByProductTemplates)
{
<text>productTypeSupportedValues['@(kvp.Key)'] = {};</text>
foreach (var item in kvp.Value)
{
<text>productTypeSupportedValues['@(kvp.Key)']['@(item.Value)'] = '@Html.Raw(JavaScriptEncoder.Default.Encode((item.Text)))';</text>
}
}
var productTemplateDropddown = $("#@Html.IdFor(model => model.ProductTemplateId)");
var productTemplateSelectedValue = productTemplateDropddown.val();
productTemplateDropddown.empty();
for (var name in productTypeSupportedValues[selectedProductTypeId]) {
productTemplateDropddown.append($("<option></option>").attr("value", name).text(productTypeSupportedValues[selectedProductTypeId][name]));
}
//previously selected value
$('#@Html.IdFor(model => model.ProductTemplateId) option').each(function(){
if (this.value == productTemplateSelectedValue) {
productTemplateDropddown.val(productTemplateSelectedValue);
}
});
if ($('#@Html.IdFor(model => model.ProductTemplateId) option').length > 1) {
$('#pnlProductTemplateId').showElement();
} else {
$('#pnlProductTemplateId').hideElement();
}
}
//required product friendly names
$(function() {
loadRequiredProductFriendlyNames();
});
$(function() {
$('#@Html.IdFor(model => model.RequiredProductIds)')
.data('timeout', null)
.keyup(function() {
clearTimeout($(this).data('timeout'));
//one second timeout
$(this).data('timeout', setTimeout(loadRequiredProductFriendlyNames, 1000));
});
});
function loadRequiredProductFriendlyNames() {
var inputValue = $('#@Html.IdFor(model => model.RequiredProductIds)').val();
if (inputValue) {
//load friendly names
$('#required-products-check-progress').show();
var postData = {
productIds: inputValue
};
addAntiForgeryToken(postData);
$.ajax({
cache: false,
type: "POST",
url: "@Url.Action("LoadProductFriendlyNames", "Product")",
data: postData,
dataType: "json",
success: function (data, textStatus, jqXHR) {
$('#required-product-names').text(data.Text);
},
error: function (jqXHR, textStatus, errorThrown) {
$('#required-product-names').text('');
},
complete: function (jqXHR, textStatus) {
$('#required-products-check-progress').hide();
}
});
} else {
$('#required-product-names').text('');
}
}
$(function() {
if ('@Model.Sku') {
warningValidation('@Url.Action("SkuReservedWarning")', '@Html.NameFor(model => model.Sku)', { productId: @Model.Id, sku: '@Model.Sku' });
}
$('#@Html.IdFor(model => model.Sku)').on('input change', function () {
warningValidation('@Url.Action("SkuReservedWarning")', '@Html.NameFor(model => model.Sku)', { productId: @Model.Id, sku: $(this).val() });
});
});
</script>
<div class="card-body">
<div id="product-details-area">
@(await Html.LocalizedEditorAsync<ProductModel, ProductLocalizedModel>("product-info-localized",
@<div>
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="@Model.Locales[item].Name" />
</div>
<div class="col-md-9">
<nop-editor asp-for="@Model.Locales[item].Name" />
<span asp-validation-for="@Model.Locales[item].Name"></span>
</div>
</div>
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="@Model.Locales[item].ShortDescription" />
</div>
<div class="col-md-9">
<nop-textarea asp-for="@Model.Locales[item].ShortDescription" />
<span asp-validation-for="@Model.Locales[item].ShortDescription"></span>
</div>
</div>
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="@Model.Locales[item].FullDescription" />
</div>
<div class="col-md-9">
<nop-editor asp-for="@Model.Locales[item].FullDescription" asp-template="RichEditor" />
<span asp-validation-for="@Model.Locales[item].FullDescription"></span>
@await Component.InvokeAsync(typeof(FullDescriptionGeneratorViewComponent), new FullDescriptionGeneratorModel
{
LanguageId = Model.Locales[item].LanguageId,
ProductNameElementId = Html.IdFor(p=>p.Locales[item].Name)
})
</div>
</div>
<input type="hidden" asp-for="@Model.Locales[item].LanguageId" />
<input type="hidden" id="lang-@Model.Locales[item].LanguageId" value="@item" />
</div>
,
@<div>
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="Name" />
</div>
<div class="col-md-9">
<nop-editor asp-for="Name" asp-required="true" />
<span asp-validation-for="Name"></span>
</div>
</div>
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="ShortDescription" />
</div>
<div class="col-md-9">
<nop-textarea asp-for="ShortDescription" />
<span asp-validation-for="ShortDescription"></span>
</div>
</div>
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="FullDescription" />
</div>
<div class="col-md-9">
<nop-editor asp-for="FullDescription" asp-template="RichEditor" />
<span asp-validation-for="FullDescription"></span>
<input type="hidden" id="ai-generated-description" onclick="update_description()" />
<input type="hidden" id="ai-lang-id" />
@await Component.InvokeAsync(typeof(FullDescriptionGeneratorViewComponent), new FullDescriptionGeneratorModel
{
LanguageId = 0,
ProductNameElementId = Html.IdFor(p=>p.Name)
})
</div>
</div>
</div>))
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="Sku" />
</div>
<div class="col-md-9">
<nop-editor asp-for="Sku" />
<span asp-validation-for="Sku"></span>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-md-3">
<nop-label asp-for="SelectedCategoryIds" />
</div>
<div class="col-md-9">
<div class="input-group-append">
<div class="input-group">
<nop-select asp-for="SelectedCategoryIds" asp-items="Model.AvailableCategories" asp-multiple="true" />
</div>
</div>
<script>
$(function() {
var categoryIdsInput = $('#@Html.IdFor(model => model.SelectedCategoryIds)').select2({
closeOnSelect: false,
@if (!Model.AvailableCategories.Any())
{
<text>
disabled: true,
placeholder: '@T("Admin.Catalog.Products.Fields.Categories.NoCategoriesAvailable")',
</text>
}
});
});
</script>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.Manufacturers ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="SelectedManufacturerIds" />
</div>
<div class="col-md-9">
<nop-select asp-for="SelectedManufacturerIds" asp-items="Model.AvailableManufacturers" asp-multiple="true" />
<script>
$(function() {
var manufacturersIdsInput = $('#@Html.IdFor(model => model.SelectedManufacturerIds)').select2({
closeOnSelect: false,
@if (!Model.AvailableManufacturers.Any())
{
<text>
disabled: true,
placeholder: '@T("Admin.Catalog.Products.Fields.Manufacturers.NoManufacturersAvailable")',
</text>
}
});
});
</script>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.Published ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="Published" />
</div>
<div class="col-md-9">
<nop-editor asp-for="Published" />
<span asp-validation-for="Published"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.ProductTags ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="SelectedProductTags" />
</div>
<div class="col-md-9">
<nop-select asp-for="SelectedProductTags" asp-items="Model.AvailableProductTags" asp-multiple="true" />
<span asp-validation-for="SelectedProductTags"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.GTIN ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="Gtin" />
</div>
<div class="col-md-9">
<nop-editor asp-for="Gtin" />
<span asp-validation-for="Gtin"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.ManufacturerPartNumber ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="ManufacturerPartNumber" />
</div>
<div class="col-md-9">
<nop-editor asp-for="ManufacturerPartNumber" />
<span asp-validation-for="ManufacturerPartNumber"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.ShowOnHomepage ? null : "advanced-setting")" @(Model.IsLoggedInAsVendor ? Html.Raw("style='display: none;'") : null)>
<div class="col-md-3">
<nop-label asp-for="ShowOnHomepage" />
</div>
<div class="col-md-9">
<nop-editor asp-for="ShowOnHomepage" />
<span asp-validation-for="ShowOnHomepage"></span>
</div>
</div>
<nop-nested-setting asp-for="ShowOnHomepage" disable-auto-generation="true">
<div class="form-group row @(Model.ProductEditorSettingsModel.ShowOnHomepage ? null : "advanced-setting")" id="pnlDisplayOrder" @(Model.IsLoggedInAsVendor ? Html.Raw("style='display: none;'") : null)>
<div class="col-md-3">
<nop-label asp-for="DisplayOrder" />
</div>
<div class="col-md-9">
<nop-editor asp-for="DisplayOrder" />
<span asp-validation-for="DisplayOrder"></span>
</div>
</div>
</nop-nested-setting>
<div class="form-group row @(Model.ProductEditorSettingsModel.ProductType ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="ProductTypeId" />
</div>
<div class="col-md-9">
<nop-select asp-for="ProductTypeId" asp-items="@(await ((ProductType)Model.ProductTypeId).ToSelectListAsync())" />
<span asp-validation-for="ProductTypeId"></span>
</div>
</div>
@if (Model.Id > 0 && Model.AssociatedToProductId > 0)
{
<div class="form-group row @(Model.ProductEditorSettingsModel.ProductType ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="AssociatedToProductId" />
</div>
<div class="col-md-9">
<a asp-controller="Product" asp-action="Edit" asp-route-id="@Model.AssociatedToProductId">@Model.AssociatedToProductName</a>
</div>
</div>
}
<div class="card card-default margin-bottom" id="group-associated-products">
<div class="card-header">
@T("Admin.Catalog.Products.AssociatedProducts")
</div>
@if (Model.Id > 0)
{
<div class="card-body">
<ul class="common-list">
<li>
@T("Admin.Catalog.Products.AssociatedProducts.Note1")
</li>
<li>
@T("Admin.Catalog.Products.AssociatedProducts.Note2")
</li>
</ul>
@await Html.PartialAsync("Table", new DataTablesModel
{
Name = "associatedproducts-grid",
UrlRead = new DataUrl("AssociatedProductList", "Product", new RouteValueDictionary { [nameof(Model.AssociatedProductSearchModel.ProductId)] = Model.AssociatedProductSearchModel.ProductId }),
UrlDelete = new DataUrl("AssociatedProductDelete", "Product", null),
UrlUpdate = new DataUrl("AssociatedProductUpdate", "Product", null),
Length = Model.AssociatedProductSearchModel.PageSize,
LengthMenu = Model.AssociatedProductSearchModel.AvailablePageSizes,
ColumnCollection = new List<ColumnProperty>
{
new ColumnProperty(nameof(AssociatedProductModel.ProductName))
{
Title = T("Admin.Catalog.Products.AssociatedProducts.Fields.Product").Text
},
new ColumnProperty(nameof(AssociatedProductModel.DisplayOrder))
{
Title = T("Admin.Catalog.Products.AssociatedProducts.Fields.DisplayOrder").Text,
Width = "150",
ClassName = NopColumnClassDefaults.CenterAll,
Editable = true,
EditType = EditType.Number
},
new ColumnProperty(nameof(AssociatedProductModel.Id))
{
Title = T("Admin.Common.View").Text,
Width = "150",
ClassName = NopColumnClassDefaults.Button,
Render = new RenderButtonView(new DataUrl("~/Admin/Product/Edit/", nameof(AssociatedProductModel.Id)))
},
new ColumnProperty(nameof(AssociatedProductModel.Id))
{
Title = T("Admin.Common.Edit").Text,
Width = "200",
ClassName = NopColumnClassDefaults.Button,
Render = new RenderButtonsInlineEdit()
},
new ColumnProperty(nameof(AssociatedProductModel.Id))
{
Title = T("Admin.Common.Delete").Text,
Width = "100",
Render = new RenderButtonRemove(T("Admin.Common.Delete").Text),
ClassName = NopColumnClassDefaults.Button
}
}
})
</div>
<div class="card-footer">
<button type="submit" id="btnAddNewAssociatedProduct" onclick="javascript:OpenWindow('@(Url.Action("AssociatedProductAddPopup", "Product", new {productId = Model.Id, btnId = "btnRefreshAssociatedProducts", formId = "product-form"}))', 800, 800, true); return false;" class="btn btn-primary">
@T("Admin.Catalog.Products.AssociatedProducts.AddNew")
</button>
<button type="submit" id="btnRefreshAssociatedProducts" style="display: none"></button>
<script>
$(function() {
$('#btnRefreshAssociatedProducts').click(function () {
//refresh grid
updateTable('#associatedproducts-grid');
//return false to don't reload a page
return false;
});
});
</script>
</div>
}
else
{
<div class="card-body">
@T("Admin.Catalog.Products.AssociatedProducts.SaveBeforeEdit")
</div>
}
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.ProductTemplate ? null : "advanced-setting")" @(Model.AvailableProductTemplates.SelectionIsNotPossible() ? Html.Raw("style=\"display:none\"") : null) id="nnpnlProductTemplateId">
<div class="col-md-3">
<nop-label asp-for="ProductTemplateId" />
</div>
<div class="col-md-9">
<nop-select asp-for="ProductTemplateId" asp-items="Model.AvailableProductTemplates" />
<span asp-validation-for="ProductTemplateId"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.VisibleIndividually ? null : "advanced-setting")" id="group-visible-individually">
<div class="col-md-3">
<nop-label asp-for="VisibleIndividually" />
</div>
<div class="col-md-9">
<nop-editor asp-for="VisibleIndividually" />
<span asp-validation-for="VisibleIndividually"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.AgeVerification ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="AgeVerification" />
</div>
<div class="col-md-9">
<nop-editor asp-for="AgeVerification" />
<span asp-validation-for="AgeVerification"></span>
</div>
<script asp-location="Footer">
$(function() {
$('#@Html.IdFor(m => m.AgeVerification)').on('change', function() {
if (this.checked) {
warningValidation('@Url.Action("CustomersDateOfBirthDisabledWarning")', '@Html.NameFor(model => model.AgeVerification)', { ageVerification: this.checked });
}
else {
$(this).siblings('.field-validation-custom').remove();
}
});
$('#@Html.IdFor(m => m.AgeVerification)').trigger('change');
});
</script>
</div>
<nop-nested-setting asp-for="AgeVerification">
<div class="form-group row @(Model.ProductEditorSettingsModel.AgeVerification ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="MinimumAgeToPurchase" />
</div>
<div class="col-md-9">
<nop-editor asp-for="MinimumAgeToPurchase" asp-required="true" />
<span asp-validation-for="MinimumAgeToPurchase"></span>
</div>
</div>
</nop-nested-setting>
@await Component.InvokeAsync(typeof(AclCustomerRolesViewComponent), Model)
<div class="form-group row @(Model.ProductEditorSettingsModel.Stores ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="SelectedStoreIds" />
</div>
<div class="col-md-9">
<div class="row">
<div class="col-md-4">
<nop-select asp-for="SelectedStoreIds" asp-items="Model.AvailableStores" asp-multiple="true" />
<script>
$(function() {
var storesIdsInput = $('#@Html.IdFor(model => model.SelectedStoreIds)').select2({
closeOnSelect: false,
@if (!Model.AvailableStores.Any())
{
<text>
disabled: true,
placeholder: 'No stores available',
</text>
}
});
});
</script>
</div>
<div class="col-md-8">
@await Component.InvokeAsync(typeof(MultistoreDisabledWarningViewComponent))
</div>
</div>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.Vendor ? null : "advanced-setting")" @(Model.IsLoggedInAsVendor ? Html.Raw("style='display: none;'") : null)>
<div class="col-md-3">
<nop-label asp-for="VendorId" />
</div>
<div class="col-md-9">
<nop-select asp-for="VendorId" asp-items="Model.AvailableVendors" />
<span asp-validation-for="VendorId"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.RequireOtherProductsAddedToCart ? null : "advanced-setting")" id="group-required-other-products">
<div class="col-md-3">
<nop-label asp-for="RequireOtherProducts" />
</div>
<div class="col-md-9">
<nop-editor asp-for="RequireOtherProducts" />
<span asp-validation-for="RequireOtherProducts"></span>
</div>
</div>
<nop-nested-setting asp-for="RequireOtherProducts">
<div class="form-group row @(Model.ProductEditorSettingsModel.RequireOtherProductsAddedToCart ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="RequiredProductIds" />
<span id="required-products-check-progress" style="display: none; float: right; clear: both" class="please-wait">
@T("Common.Wait")
</span>
</div>
<div class="col-md-9">
<div class="input-group">
<nop-editor asp-for="RequiredProductIds" />
<div class="input-group-append">
<button type="submit" id="btnRefreshRequiredProducts" style="display: none"></button>
<script>
$(function() {
$('#btnRefreshRequiredProducts').click(function () {
//refresh product list
loadRequiredProductFriendlyNames();
//return false to don't reload a page
return false;
});
});
</script>
<button type="submit" id="btnAddNewRequiredProduct" onclick="javascript:OpenWindow('@(Url.Action("RequiredProductAddPopup", "Product", new {btnId = "btnRefreshRequiredProducts", productIdsInput = "RequiredProductIds"}))', 800, 850, true); return false;" class="btn btn-info">
@T("Admin.Catalog.Products.Fields.RequiredProductIds.AddNew")
</button>
</div>
</div>
<span id="required-product-names"></span>
@Html.ValidationMessageFor(model => model.RequiredProductIds)
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.RequireOtherProductsAddedToCart ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="AutomaticallyAddRequiredProducts" />
</div>
<div class="col-md-9">
<nop-editor asp-for="AutomaticallyAddRequiredProducts" />
<span asp-validation-for="AutomaticallyAddRequiredProducts"></span>
</div>
</div>
</nop-nested-setting>
<div class="form-group row @(Model.ProductEditorSettingsModel.AllowCustomerReviews ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="AllowCustomerReviews" />
</div>
<div class="col-md-9">
<nop-editor asp-for="AllowCustomerReviews" />
<span asp-validation-for="AllowCustomerReviews"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.AvailableStartDate ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="AvailableStartDateTimeUtc" />
</div>
<div class="col-md-9">
<nop-editor asp-for="AvailableStartDateTimeUtc" />
<span asp-validation-for="AvailableStartDateTimeUtc"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.AvailableEndDate ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="AvailableEndDateTimeUtc" />
</div>
<div class="col-md-9">
<nop-editor asp-for="AvailableEndDateTimeUtc" />
<span asp-validation-for="AvailableEndDateTimeUtc"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.MarkAsNew ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="MarkAsNew" />
</div>
<div class="col-md-9">
<nop-editor asp-for="MarkAsNew" />
<span asp-validation-for="MarkAsNew"></span>
</div>
</div>
<nop-nested-setting asp-for="MarkAsNew">
<div class="form-group row @(Model.ProductEditorSettingsModel.MarkAsNew ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="MarkAsNewStartDateTimeUtc" />
</div>
<div class="col-md-9">
<nop-editor asp-for="MarkAsNewStartDateTimeUtc" />
<span asp-validation-for="MarkAsNewStartDateTimeUtc"></span>
</div>
</div>
<div class="form-group row @(Model.ProductEditorSettingsModel.MarkAsNew ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="MarkAsNewEndDateTimeUtc" />
</div>
<div class="col-md-9">
<nop-editor asp-for="MarkAsNewEndDateTimeUtc" />
<span asp-validation-for="MarkAsNewEndDateTimeUtc"></span>
</div>
</div>
</nop-nested-setting>
<div class="form-group row @(Model.ProductEditorSettingsModel.AdminComment ? null : "advanced-setting")">
<div class="col-md-3">
<nop-label asp-for="AdminComment" />
</div>
<div class="col-md-9">
<nop-textarea asp-for="AdminComment" />
<span asp-validation-for="AdminComment"></span>
</div>
</div>
</div>