Может кто-нибудь помочь мне здесь ?!Спасибо!
У меня есть вид, который отображает список продуктов вместе с кнопкой «Добавить продукт» для каждого.Я вызываю метод CreateNewProduct
для каждого клика «Добавить продукт», чтобы узнать статус продукта.В зависимости от статуса, либо мне нужно остаться в том же представлении, либо мне нужно вызвать модальное всплывающее окно.Я могу сделать это, создав модальное всплывающее окно в другом представлении.Но я хочу вызвать модальное всплывающее окно div (также передать модальное) из того же представления, где отображается список продуктов.Возможно ли это?
public ActionResult CreateNewProduct(int productId)
{
var sharedProduct = _productTemplateService.GetSharedProducts(productId);
var _finalSharedProducts = (sharedProduct.Any(t => t.productId != productId));
if (_finalSharedProducts)
{
var sharedProdctTemplate = _productTemplateService.GetSharedProduct(productId);
return View("ModalView", new SharedModel
{
SharedProduct = sharedProdctTemplate
});
}
else
{
_productTemplateService.CreateNewProduct(productId);
return RedirectToAction("Details", "ProductTemplate");
}
}
Код модели
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Shared Product</h4>
</div>
<div class="modal-body">
<div class="flex-row">
<div class="col-6">
<div class="d-flex flex-row">
<div class="p-2">Product ID</div>
<div class="p-2">Product Types</div>
<div class="p-2">Status</div>
</div>
@foreach (var productTemplate in Model.SharedProduct )
{
<div class="d-flex flex-row">
<div class="p-2">@productTemplate.ProductId</div>
<div class="p-2">@productTemplate.ProductType</div>
<div class="p-2">@productTemplate.StatusCode</div>
</div>
}
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |
@Html.ActionLink("Back to List", "Index")
</p>
<script type="text/javascript">
$(document).ready(function () {
$('#myModal').modal('show');
});
</script>
ОБНОВЛЕНИЕ: Я заставил его работать.Это то, что я сделал.В конце я упомянул о проблемах, с которыми я сталкиваюсь.
Ссылка, модальный режим и сценарий в моем основном виде - Подробное представление (вызывается из контроллера ProductTemplate)
<td><a href="#" class="btn btn-sm btn-primary" onclick="loadModal('@productTemplate.productId,'@productTemplate.customerId')">Add New Product</a></td>
<div class="modal fade" id="mymodel" role="dialog" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Shared Products</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body" id="mymodelbody">
</div>
</div>
</div>
<script>
var loadModal = function (productId, customerId) {
$.ajax({
type: 'GET',
url: '/NewProductTemplate/CreateNewProduct',
cache: false,
data: {
productId: productId,
customerId: customerId
},
dataType: 'html',
success: function (data) {;
$("#mymodelbody").html(data);
$("#mymodel").modal("show");
}
});
}
</script>
NewProductTemplateController Code
public ActionResult CreateNewProduct(Guid productId, Guid customerId)
{
var sharedProduct = _productTemplateService.GetSharedProducts(productId);
var _finalSharedProducts = (sharedProduct.Any(t => t.productId != productId));
if (_finalSharedProducts)
{
var sharedProdctTemplate = _productTemplateService.GetSharedProduct(productId);
return PartialView("_shared", new SharedModel
{
SharedProduct = sharedProdctTemplate
});
}
else
{
_productTemplateService.CreateNewProduct(productId);
return RedirectToAction("Details", "ProductTemplate");
}
}
Частичное представление _shared.view code
@model SharedModel
@using (Html.BeginForm("ShareProduct", "NewProductTemplate", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="flex-row">
<div class="col-6">
<div class="d-flex flex-row">
<div class="p-2">Product ID</div>
<div class="p-2">Product Types</div>
<div class="p-2">Status</div>
</div>
@for (var i = 0; i < Model.SharedProducts.Count(); i++)
{
@Html.HiddenFor(model => model.SharedProducts.ElementAt(i).ProductId)
@Html.HiddenFor(model => model.SharedProducts.ElementAt(i).CustomerId)
@Html.HiddenFor(model => model.SharedProducts.ElementAt(i).ProductType)
@Html.HiddenFor(model => model.SharedProducts.ElementAt(i).StatusCode)
@Html.HiddenFor(model => model.SharedProducts.ElementAt(i).IsShared)
<div class="d-flex flex-row">
<div class="p-2">@Html.DisplayFor(model => model.SharedProducts.ElementAt(i).ProductId)</div>
<div class="p-2">@Html.DisplayFor(model => model.SharedProducts.ElementAt(i).ProductType)</div>
<div class="p-2">@Html.DisplayFor(model => model.SharedProducts.ElementAt(i).StatusCode)</div>
@if (Model.SharedProducts.ElementAt(i).StatusCode == VersionStatus.PUBLISHED)
{
<div class="p-2">@Html.EditorFor(m => m.SharedProducts.ElementAt(i).IsShared)</div>
}
</div>
}
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-sm btn-primary" />
<button type="button" class="btn btn-sm btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
ПРОБЛЕМА: 1) Когда я сохраняю кнопку отправки в модальном всплывающем окне(частичное представление), он вызывает метод ShareProduct из контроллера NewProductTemplate.По какой-то причине свойство SharedProducts SharedModel имеет нулевое значение, когда оно попадает в код контроллера.Можете ли вы помочь мне здесь, почему он становится нулевым?
public ActionResult ShareProduct (SharedModel shareModel)
{
//Access ShareProducts from shareModel
return RedirectToAction("Details", "ProductTemplate");
}
ПРОБЛЕМА: 2) Я хочу загрузить всплывающее окно, только если продукт является общим, в противном случае я просто хочу перенаправить на Подробнеепросмотреть, как указано в методе CreateNewProduct контроллера NewProductTemplate.Проблема в том, что он загружает Детальный вид также во всплывающем окне, если продукт не используется совместно, так как это делает мой скриптЕсть ли способ проверить данные в функции «Успех» перед показом модального всплывающего окна?Если data / html содержит общий текст, я хотел бы загрузить нормальное представление сведений.Я просто предполагаю.Я пытался сделать это, но безуспешно.
Метод Detail в ProductTemplate Controller
public ActionResult Details()
{
var productTemplate = _productTemplateService.GetAllProducts(User);
return View(new DetailsModel
{
ProductTemplate = productTemplate,
});
}