【问题标题】:Jquery text field updating within foreach Razorforeach Razor 中的 Jquery 文本字段更新
【发布时间】:2015-10-15 13:16:19
【问题描述】:

我正在开发一个简单的 asp.net razor 显示页面,我通过 ViewBag 获取我的数据。在数据中,有一个供应商 ID,但我想显示供应商名称。 html:

@foreach (XXX supplier in ViewBag.UnApprovedOrders)
{
<tr >
   <td>
      <text id="supplierName">na</text>
      <script>supplierFromId("@supplier.SupplierId");</script>
   </td>
</tr>

和脚本:

function supplierFromId(supplierId)
{
var name;
for (var i = 1; i < list.length; i++) {
   if (list[i].id == supplierId) name = list[i].name;
}
   $("#supplierName").text(name);
};

该列表是从其他地方提供的供应商列表。 问题是:该函数只被调用一次,所以只有第一个字段得到正确的名称,其余的仍然是“na”。
怎么了?

【问题讨论】:

  • 为什么不在代码中这样做,并返回一个已经包含供应商名称的模型,那么你的剃须刀只需要显示它?

标签: c# jquery razor foreach


【解决方案1】:

由于您的 foreach 循环,您指定的 &lt;text id="supplierName"&gt;na&lt;/text&gt; id 将被复制。

我的建议是从使用id 更改为使用class 来识别供应商名称。然后就可以用jquery的.each来更新所有的类名了。

【讨论】:

  • 你能给我举个例子吗?
  • @Paxsentry .each 是函数文档的链接
【解决方案2】:

ID 专门标识单个元素。使用一个类应该可以完成这项工作。类旨在用于多个元素,并允许您更新所有元素

【讨论】:

    【解决方案3】:

    &lt;text id="supplierName"&gt;na&lt;/text&gt;

    您在 id supplierName 中创建了许多标签,但只能应用第一个标签。

    要解决此问题,请尝试将id 转换为class,如下所示:

    &lt;text class="supplierName"&gt;na&lt;/text&gt;

    <script>
    $(".supplierName").each(function() {
       // do something...
    });
    </script>
    

    【讨论】:

      【解决方案4】:

      这应该可行:

      @foreach (XXX supplier in ViewBag.UnApprovedOrders)
      {
      <tr >
         <td>
            <text class="supplierName">@supplier.SupplierId</text>
         </td>
      </tr>
      }
      
      <script>
      
      $(document).ready(function() {
          $('.supplierName').each(function() {
      
              var supplierId = $(this).text();
              var name = '';
              for (var i = 0; i < list.length; i++) {
                 if (list[i].id == supplierId) name = list[i].name;
              }
      
              $(this).text(name)
          });
      });
      </script>
      

      【讨论】:

      • 谢谢,它几乎可以工作了,除了没有调用该函数(只是放置了一个 console.log("supplierId"); 并且没有显示任何内容。还有显示数值的字段,因为前面的原因。
      • 将 val() 更改为 text() 就可以了。谢谢大家! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多