วิธีการประกาศตัวแปรท้องถิ่นในมีดโกน?


354

ฉันกำลังพัฒนาเว็บแอปพลิเคชั่นใน asp.net mvc 3 ฉันใหม่มาก ในมุมมองที่ใช้มีดโกนฉันต้องการประกาศตัวแปรท้องถิ่นบางส่วนและใช้มันตลอดทั้งหน้า สิ่งนี้สามารถทำได้?

ดูเหมือนเป็นเรื่องเล็กน้อยที่จะสามารถทำสิ่งต่อไปนี้:

@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
@if (isUserConnected)
{ // meaning that the viewing user has not been saved
    <div>
        <div> click to join us </div>
        <a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
    </div>
}

แต่มันไม่ได้ผล เป็นไปได้ไหม

คำตอบ:


521

ฉันคิดว่าคุณสนิทมากลองสิ่งนี้:

@{bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);}
@if (isUserConnected)
{ // meaning that the viewing user has not been saved so continue
    <div>
        <div> click to join us </div>
        <a id="login" href="javascript:void(0);" style="display: inline; ">join here</a>
    </div>
}

โอ้ยฉันพยายามทุกอย่างเท่าที่จะทำได้ แต่สิ่งนี้ ขอบคุณ Tomas!
vondip

คุณจะทำสิ่งนี้ใน VB.NET ได้อย่างไร
Stefan Paul Noack

7
โอ้ฉันพบเอง: @Code .. End Codeแทนที่จะ@{ .. }
Stefan Paul Noack

1
@ Abhijeet.Nagre ในคำถามที่เขาเขียน: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);แต่นิยามของตัวแปรต้องอยู่ใน "code block" ฉันไม่สามารถตอบคำถามที่ดีกว่าได้ว่าทำไมถึงเป็นเช่นนั้น
โทมัส Jansson

2
@AbhijeetNagre - มีดโกนคือมักจะค่อนข้างดีในการทำความเข้าใจที่รหัสเริ่มต้นและสิ้นสุด แต่มันไม่สมบูรณ์ บางครั้งเราเพียงแค่ให้คำแนะนำเล็กน้อยเกี่ยวกับสิ่งที่ควรได้รับการปฏิบัติในฐานะมีดโกน / C # และสิ่งที่ไม่ควร หากคุณเคยได้รับข้อผิดพลาดของมีดโกนการเพิ่ม{ }แท็กมักเป็นขั้นตอนแรก
Jon Story

50

ฉันคิดว่าตัวแปรควรอยู่ในบล็อกเดียวกัน:

@{bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
    if (isUserConnected)
    { // meaning that the viewing user has not been saved
        <div>
            <div> click to join us </div>
            <a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
        </div>
    }
    }

ดูเหมือนว่าจะเป็นอย่างนั้นใน MVC3 อย่างน้อย
Matthew Walton

1
ยอดเยี่ยม มีความคิดใดบ้างที่คุณจะใช้ตัวแปรisUserConnectedอีกครั้งในหน้าลงไปอีก?
SharpC

@SharpC เมื่อคุณประกาศตัวแปรเช่นเดียวกับที่มีอยู่ในไฟล์. cshtml ที่เหลือ ต่อมาในไฟล์คุณสามารถทำสิ่งที่ชอบ@if (isUserConnected) { /* stuff if connected */ }หรือ<div>Connected? @isUserConnected</div>(นี้ทำงานได้ดีกับสตริง) ไม่สามารถใช้งานได้นอกไฟล์นั้น (เช่นคุณจะต้องประกาศแยกเป็นส่วน ๆ )
Dan Mangiarelli

18

คุณยังสามารถใช้:

@if(string.IsNullOrEmpty(Model.CreatorFullName))
{
...your code...
}

ไม่จำเป็นต้องใช้ตัวแปรในรหัส


6
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม
Owen Pauling

13

หากคุณกำลังมองหาตัวแปร int หนึ่งตัวที่เพิ่มขึ้นเป็นลูปโค้ดคุณสามารถใช้สิ่งนี้:

@{
  int counter = 1;

  foreach (var item in Model.Stuff) {
    ... some code ...
    counter = counter + 1;
  }
} 

12

ไม่ใช่คำตอบโดยตรงสำหรับปัญหาของ OP แต่อาจช่วยคุณได้เช่นกัน คุณสามารถประกาศตัวแปรท้องถิ่นถัดจาก html บางตัวภายในขอบเขตได้โดยไม่มีปัญหา

@foreach (var item in Model.Stuff)
{
    var file = item.MoreStuff.FirstOrDefault();

    <li><a href="@item.Source">@file.Name</a></li>
}

นี่คือสิ่งที่ฉันกำลังมองหาขอบคุณ !!
Ninjanoel

2

เพื่อประกาศ var ที่จะเข้าถึงได้ทั่วทั้งหน้าส่วนบนของหน้าโดยปกติจะเป็นไปได้ โดยนัยหรือทางเลือกของคุณอย่างชัดเจน

          @{
               //implicit
               var something1 = "something";
               //explicit
               string something2 = "something";
          }


            @something1 //to display on the page
            @something2 //to display on the page

1

คุณสามารถใส่ทุกอย่างไว้ในบล็อกและเขียนโค้ดใด ๆ ที่คุณต้องการในบล็อกนั้นได้อย่างง่ายดายด้วยรหัสด้านล่างทั้งหมด:

@{
        bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
        if (isUserConnected)
        { // meaning that the viewing user has not been saved
            <div>
                <div> click to join us </div>
                <a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
            </div>
        }
    }

มันช่วยให้คุณมีรหัสที่สะอาดขึ้นในตอนแรกและคุณสามารถป้องกันหน้าเว็บของคุณจากการโหลดบล็อกที่แตกต่างกันหลายครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.