我的代碼有一些格式問題,其中我正在循環對象的集合,並嘗試生成嵌套的DIV容器。我相信,在Razor引擎嘗試將我動態發佈的CLOSING div標籤與開放標籤進行匹配時,出現了這種複雜性。有人可以幫助我確定下面的代碼中預期的行爲是什麼,這些代碼模仿我自己的行爲,但爲了演示的目的,它大大簡化了。在MVC Razor中使用條件邏輯來創建動態DIV標籤。標籤不匹配
在這個例子中,我想要一個帶有邊界的大外部DIV,其中包含3個不同大小的小型DIV(爲了識別)。我發生的事情是我打的第一個CLOSING DIV標籤(在循環中;最後)被應用到OUTER DIV,但我希望它應用於循環內的LARGE DIV標籤。我希望將我的FINAL DIV標記(循環外部)應用於大OUTER DIV標記。
結果是,我的3個INNER DIV標籤是在OUTER DIV標籤之外創建的,並沒有嵌套在它的內部。
我只想知道Razor如何確定哪個DIV標籤屬於哪個關閉DIV標籤,以及開發者是否對此有任何控制權。有任何想法嗎?
@:<div class="myOuterDivWithBorder">
for (int j = 0; j < 3; j++)
{
if (j == 0)
{
@:<div class="largeDiv">
}
else if (j == 1)
{
@:<div class="mediumDiv">
}
else if (j == 2)
{
@:<div class="smallDiv">
}
@:</div>
}
@:</div>
--Here's a glimpse into some of my actual code located within my for loop. Hopefully
--this illustrates why I feel I am unable to position both my opening and closing DIVs
--within the same scope ({}).
iCurrentDivSize = GetDivSize(question.Type.ToLower(), options);
if (iAvailableDivSpace == 3)
{
//Begin a new div.
@:<div class="wrapDivLarge">
}
else //iAvailableDivSpace is 1 or 2
{
if (iCurrentDivSize > iAvailableDivSpace)
{
//First, close the previous OUTER div, and begin a new div.
@:</div>
@:<div class="wrapDivLarge">
iAvailableDivSpace = 3;
}
}
//No new OUTER div tag; just new INNER div tag
switch (iCurrentDivSize)
{
case 1:
@:<div class="wrapDivSmall">
break;
case 2:
@:<div class="wrapDivMedium">
break;
}
iAvailableDivSpace = iAvailableDivSpace - iCurrentDivSize;
恐怕我的代碼有點複雜。它檢查每個div的內容,並決定它是大,中或小的內容,併爲其分配適當的類別。這個想法是通過在每個外部分區內安裝3個DIV來節省空間。在這個OUTER DIV裏面,我可以裝3個小,1個小,1箇中,或者1個大。因此,此評估正在循環中完成,並且具有打開/關閉div標籤,如您所描繪的。它只是將它找到的第一個關閉div分配給我的OUTER DIV,並提前關閉它。有沒有辦法強制關閉DIV標籤來關閉特定的開放DIV標籤? – nightowl
是的,更新你的例子。 –
謝謝Erik。我不認爲我能夠在同一範圍內包含我的打開/關閉DIV標籤,除非您看到我沒有的東西。我在上面的示例下面張貼了我的實際代碼片段。你能從中得到什麼?我運氣不好嗎? – nightowl