【问题标题】:creating dynamic id for divs in MVC with Razor... with a twist [closed]使用 Razor 在 MVC 中为 div 创建动态 id ......
【发布时间】:2015-01-07 12:21:34
【问题描述】:

扭曲的是,我在该主题上找到的所有答案似乎都不起作用。我几乎尝试了在这个问题的答案中找到的所有格式,并且我自己做了一些绝望的尝试,但它们都没有任何效果。就好像 razor 不存在一样,但是同一个 cshtml 文件中的其他 razor 合成器可以毫无问题地执行。 大多数情况下,div 是在循环中声明的,并且它的名称应附加 i。这是我尝试过的一些东西,不是按照我尝试它们的顺序。顺序可以通过合成器的健全性下降来推断:

<div id="accord@(i)">

<div id="@("accord" + i)>

<div id="@{@("accord" + i)}">

与:

string fName = "accord" + i;        //fName is filled correctly, that much I could verify

我尝试了一些东西:

<div id=@fName>

<div id="@fName">

<div id="@(fName)">

<div id="@{fName}">

<div id=@(fName)>

<div id="@{@fName}">

<div id=@{@fName}> 

我还尝试了这两种方法的几种组合,例如

string fName = "accord";
<div id="@(fName + i)">

也...

所有这些尝试都没有产生任何结果... div 的 id 总是 #Literaly_Whatever_Comes_after_=

那么...有人可以大胆猜测一下我做错了什么吗?

为了完成,因为你永远不知道可能涉及什么,这里是整个循环。它没有任何实际的逻辑,这是在我使这个概念起作用之后出现的:

<div id="yearaccord">

    @for (int i = 0; i < 4; ++i)
    {
        //add a nested months accordion for every year
        <h3>i = @i</h3>
        string fName = "accord" + i;
        <div id="@{@fName}">

            @for (int j = 0; j < 4; ++j)
            {
                //add an accordion displaying the blog titles for each month
                <h3>j = @j</h3>
                <div>
                    @for (int w = 0; w < 6; ++w)
                    {
                        //add blog titles
                        <h4>JabbadaJba @w</h4>
                    }
                </div>
            }
        </div>
    }
</div>

请注意,此循环中的所有其他 razor synthax 的行为方式都与我预期的一样......只有当它用作 id 时,事情才会变得不稳定。

【问题讨论】:

  • &lt;div id="@fName"&gt; 实际呈现的 HTML 是什么?
  • 否“接受的答案?” UB? 叮叮 ;P

标签: asp.net-mvc razorengine


【解决方案1】:

string fName = "accord" + i; 在 HTML 节点之间被解释为普通 HTML。在@for 之后将其向上移动或将其包裹在@{ //.. }

@for (var i = 0; i < 10; i++) {

    var fName = "accord" + i;

    <h3>i = @i</h3>
    <div id="@{@fName}">
        //..
    </div>
}

@for (int i = 0; i < 4; ++i)
{
    //add a nested months accordion for every year
    <h3>i = @i</h3>
    @{
        string fName = "accord" + i;
    }
    <div id="@fName">
        //..
    </div>
}

【讨论】:

  • 或者只是&lt;div id="@("accord" + i)"&gt;
  • 你不需要额外的变量,你可以内联:
    跨度>
  • @devqon:不,不是这样。该变量被识别,如果我设置一个断点,我可以看到它的值。我尝试按照您的建议将它放在 @{} 中,但这会导致错误,说明该语句已经在代码块中。如果我将它移动到您建议的位置,我不会收到错误,但结果与以前相同。
  • @Ant P:如上所述,我试过了。它不起作用。编辑:刚刚看到我没有提到这种特殊的格式,但是是的,我试过了。我会再试一次以确保...
【解决方案2】:

我确实有同样的问题,我找到了解决方案, 就我而言,我不仅想在我的单个页面中填充属性,而且还想将一个确定的值传递给我的局部视图,以便我可以重用它。

警告:我的代码看起来很糟糕,我仍在寻找改进它的方法。

  @{ ViewData["suffix"] = "RF"; }
  <div @{ViewData["myId"] = "foo" + ViewData["suffix"];}
     id=@ViewData["myId"]></div>

现在,在调用局部视图之前,我会更新 ViewData["suffix"] 以确保所有复制的局部视图都具有唯一 ID。 调用 partialView 会是

  <div id="partialView1">@{Html.RenderPartial("_partialView", ViewData);}</div>

我将留下这段代码,以防有人需要它。干杯!

【讨论】:

    【解决方案3】:
    <div id="@($"text{i}")"></div>
    

    【讨论】:

      【解决方案4】:

      好的,明白了…… 问题是我只是非常确信它不起作用,而它实际上起作用了。结果看起来不像预期的那样,但这并不是让我相信它不起作用的原因。但我总是在 Visual Studio 内的调试器中检查 div 的 id ......结果 Visual Studio 没有显示 div 的实际名称,而是声明它的未解释代码。最后我在浏览器中检查元素时的id是正确的。

      只是我对整个网络事物还很陌生,之前只使用 C++(非 .NET),所以我还不知道所有事物在哪里以及它们的行为方式......这是一部分我猜是学习过程。

      感谢您的回答。一旦我知道如果他们工作,他们都工作了。

      @dawidr:您的行缺少右括号,所以这就是产生错误的原因。我仔细看了一下就注意到了;)

      【讨论】:

        【解决方案5】:

        字符串 strDynamicId= "fuFileUpload_" + @item.FeildID;

        <input type="file" accept=".pdf" name=@strDynamicId id=@strDynamicId />
        

        这对我有用 你应该试试这个

        【讨论】:

          猜你喜欢
          • 2018-01-22
          • 2015-11-30
          • 2017-09-14
          • 1970-01-01
          • 1970-01-01
          • 2015-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多