使用Razor为MVC中的div创建动态id ...带有扭曲

时间:2015-01-07 12:21:34

标签: asp.net-mvc razorengine

扭曲的是,我在这个主题上发现的所有答案似乎都不起作用。我尝试了在这个问题的答案中找到的所有格式,并在我自己做了一些绝望的尝试,但没有一个有任何影响。这几乎就像剃刀不存在一样,但是同一个cshtml文件中的其他剃刀合成器没有遇到麻烦。 在大多数情况下,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)">

... ASO

所有这些尝试都没有产生任何结果...... 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时,事情才会变得难以理解。

5 个答案:

答案 0 :(得分:0)

在HTML节点之间,

string fName = "accord" + i;被解释为普通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>
}

答案 1 :(得分:0)

好的,弄清楚了...... 问题是我只是非常相信它没有用,而它确实有效。结果并没有像预期的那样,但这并不能说服我这样做没有用。但是我总是在visual studio里面的调试器中检查div的id ...结果是visual studio没有显示div的实际名称,而是显示它被声明的未解释的代码。我在浏览器中检查元素时的ID最终是正确的。

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

感谢您的回答。一旦我知道他们在哪里工作,他们都会工作。

@dawidr:你的专栏缺少一个结束括号,因此产生了错误。一旦我仔细观察它就注意到了它;)

答案 2 :(得分:0)

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

  

警告:我的代码看起来很糟糕,我仍然找到了解决问题的方法。

  @{ 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 :(得分:0)

string strDynamicId =“ fuFileUpload_” + @ item.FeildID;

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

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

答案 4 :(得分:0)

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