У меня было представление, которое содержало следующий скрипт:
$(document).ready(function () {
var messages = @Html.Raw(Json.Encode(Model.Messages)); // Accessing the Model here.
$.each(messages, function (index, item) {
addMessageRow(item, false);
});
$("#btnAddMessage").on("click", function () {
addMessageRow();
});
// More code
});
.., который работал просто отлично. Затем я преобразовал его в частичное представление, отображаемое в модальном bootstrap. Насколько я знаю, секция скрипта не работает в модальном / частичном представлении (и это не так). Итак, я переместил код javascript в родительское представление, которое будет выполнено сразу после вызова метода .modal
:
$("a[data-modal]").on("click", function () {
$("#childModalContent").load(this.href, function () {
$("#childModal").modal({ keyboard: true }, "show");
var messages = /*GetMessagesAsJson();*/ // How to get the Messages here?
$.each(messages, function (index, item) {
addMessageRow(item, false);
});
$("#btnAddMessage").on("click", function () { // This works just fine.
addMessageRow();
});
});
return false;
});
.., который работал, за исключением того, что я не знаю, как получить Messages
коллекция сейчас, потому что она принадлежит модели частичного представления. Вот как частичное представление получает свою модель:
public ActionResult Edit(int? parentId, int? childId)
{
if (parentId == null || childId == null) { /*BadRequest*/ }
child child = GetChild(parentId, childId);
if (child == null) { /*NotFound*/ }
return PartialView("_Edit", child);
}
А вот как называется действие:
@Html.ActionLink("Edit", "Edit", "ControllerName",
new {parentId = Model.ParentId, childId = item.Id },
new { @class = "btn btn-default", data_modal = "" })
Как показывает функция .on("click")
, указанная выше, при нажатии на эту ссылку загружается частичный вид как модель. Чтобы это работало, у меня есть следующий заполнитель в родительском представлении:
<div id="childModal" class="modal fade in">
<div class="modal-dialog">
<div class="modal-content">
<div id="childModalContent"></div>
</div>
</div>
</div>
Я проверил этот похожий вопрос . Ответ там предполагает передачу соответствующих данных между представлениями, но я не уверен, как это сделать, учитывая, что контроллер возвращает частичное представление, как показано выше.
Как выполнить javascript код в частичном (модальном) виде доступа к его модели?