使用 Razor 在 MVC 中为 div 创建动态 id ...

creating dynamic id for divs in MVC with Razor... with a twist

问题是,我在该主题上找到的所有答案似乎都不起作用。我尝试了我在这个问题的答案中找到的几乎所有格式,并自己做了一些绝望的尝试,但没有任何效果。几乎就好像 razor 不存在一样,但同一个 cshtml 文件中的其他 razor synthax 可以毫无问题地执行。 大多数情况下,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 时,事情才会变得不稳定。

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>
}

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

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

感谢您的回答。一旦我知道如果他们工作的话去哪里看,他们都会工作。

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

我也有同样的问题,我找到了解决办法, 在我的例子中,我不仅想在我的单个页面中填充属性,而且还想向我的部分视图传递一个确定的值,以便我可以重新使用它。

Warning: My codes looks awful, i'm still finding my way out to improve it.

  @{ 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>

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

string strDynamicId= "fuFileUpload_" + @item.FeildID;

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

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

<div id="@($"text{i}")"></div>