通过 JavaScript 显示从 C# 列表<T>到模态 UI 的多个属性



我有多个属性来自我的 Razor Pages/MVC 应用程序,我想使用 JavaScript 推送到模态视图中。我可以通过以下方式让它与单个实体一起工作

.HTML:

<button type="button" class="nodeRowKey btn btn-info" data-toggle="modal" data-target="#confirmActivation" data-node="@item.ComputerName" id="activateNode">Activate</button>

JavaScript:

$(document).on("click", "#activateNode", function () {
var myNodeId = $(this).data('node');
$('#nodeId').text(myNodeId);
});

设置我的#nodeId标签的.text属性效果很好,但是我有多个属性,而不仅仅是item.ComputerName

显然,设置data-node="@item"给出了描述我的对象类型的字符串值,因此这不起作用。

是否有必要构建一堆隐藏的页面元素来"隐藏"模型中的属性值,以便我可以在模式对话框中显示它们?

我的想法是创建隐藏的HTML元素,每个都有自己的id,这样我就可以通过JavaScript填充目标HTML元素。

更新:我也试过:

data-node="@Html.Raw(JsonConvert.SerializeObject(item))

与其将数据序列化为按钮上的 data 属性,不如在 JavaScript 中将状态直接作为对象提供。

例如,您可以呈现一个包含变量声明的<script>标记,您可以在其中将数据呈现为 JSON 字符串。像这样:

<script>
var _modalData = @Json.Serialize(item);
</script>

然后,在你的JavaScript处理程序中,你直接引用那个对象。

如果你有多个不同的项目想要有一个模态对话框(例如,在foreach循环中(,那么你可以简单地在单个JavaScript变量中一次渲染所有数据(即作为一个数组(。然后,您可以将项目索引呈现为数据属性,以便您知道在打开模态时使用哪个项目。

另一种选择是在打开模态时使用 AJAX 请求延迟加载数据。这样,即使您没有打开任何模态,也不必将所有数据呈现到页面中。

你可以试试这个...

@using Newtonsoft.Json;
data-node="@Html.Raw(JsonConvert.SerializeObject(item))"

这可能会给你整个对象。不过目前无法测试。

最新更新