通过 javascript 将索引动态分配给 Razor 模型

Posted

技术标签:

【中文标题】通过 javascript 将索引动态分配给 Razor 模型【英文标题】:Dynamically assign index via javascript to Razor Model 【发布时间】:2020-10-11 22:23:24 【问题描述】:

我需要通过javascript动态分配每个剃须刀型号的索引。

这里是javascript

function ResetIndexModel() 
            var idx = 0;
            $('.page-name').each(function () 
                var text = $(this).text();
                text = text.replace('Model.DraftPages[#].Name', 'Model.DraftPages[' + idx + '].Name');
                $(this).text(text);
                idx++;
            );
        

这是我的 html

<li class="active tabPage"><label for="Name" class="page-name">Model.DraftPages[#].Name</label><span title="Edit Page Name" class="glyphicon glyphicon-pencil" style="font-size:10px;"></span>></li>

我也试过这个。

text = text.replace('Model.DraftPages[#].Name', '@('@')Model.DraftPages[' + idx + '].Name');

所以我需要使用 js 函数的迭代替换“#”符号。 使用我当前的代码,它只会在标签中显示“Model.DraftPages[0].Name”。

我的期望是,它应该显示@Model.DraftPages[0].Name 的值

有什么方法可以实现吗?

【问题讨论】:

您能解释一下主要问题吗?您的预期结果是什么? @Ashu 我想在元素中动态重新设置 Razor 模型的索引。所以我的预期结果是 DraftPages 索引 0 处的 'name' 属性的值。我目前拥有的是文本 'Model.Draftpages[0].Name' 本身。 0 值的名称是什么? text = text.replace('Model.DraftPages[#].Name', Model.DraftPages[idx].Name);能否请您删除单引号字符并检查它是否有效,只是猜测,不确定它是否相关 如果你想在结果中添加@,你可以试试这个:text = text.replace('Model.DraftPages[#].Name', '@Model.DraftPages[' + idx + '].Name'); 【参考方案1】:

在任何解释之前考虑一下: 1- razor 页面将在服务器端呈现,因此当您获取 html 页面并加载它时,您将看到传递给 razor 页面的模型的替换值,并且无法使用 js 更改 razor 模型的索引。

2- 相反,您可以将模型更改为 js 对象,然后用它做任何您想做的事情,例如:

    <script>
    //this is js
    var equalRazorListModel = [
    //this is razor
    @foreach(var item in Model.DraftPages)
        <text>
          name:'@item.Name',
        </text>
    
];
    </script>

在上面的代码中,我将您的名称草稿列表转换为 javascipt 数组。我希望这能给你一些想法。

【讨论】:

【参考方案2】:

您想在标签中显示的任何值都可以像这样传递

$(elements[idx]).text('@Model.DraftPages[' + idx + '].Name');

function ResetIndexModel() 
  var elements = $('.page-name');
  for (let idx = 0; idx < elements.length; idx++) 
    $(elements[idx]).text('@Model.DraftPages[' + idx + '].Name');

  

ResetIndexModel();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<li class="active tabPage">
  <label for="Name" class="page-name">Model.DraftPages[#].Name</label>
  <span title="Edit Page Name" class="glyphicon glyphicon-pencil" style="font-size:10px;"></span>
</li>

【讨论】:

以上是关于通过 javascript 将索引动态分配给 Razor 模型的主要内容,如果未能解决你的问题,请参考以下文章

动态IPv6地址分配

分配给它时动态增长一个python数组

将 HTML 中的变量动态分配给 AS3 变量

通过“Yair even or”将编号 ID 分配给可选网格的动态创建元素

将属性动态分配给 JS 对象

将 ID 分配给动态生成的 Rhandsontable