使用 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>
问题是,我在该主题上找到的所有答案似乎都不起作用。我尝试了我在这个问题的答案中找到的几乎所有格式,并自己做了一些绝望的尝试,但没有任何效果。几乎就好像 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>