Làm thế nào để khai báo một biến cục bộ trong Dao cạo?


354

Tôi đang phát triển một ứng dụng web trong asp.net mvc 3. Tôi rất mới với nó. Trong chế độ xem bằng dao cạo, tôi muốn khai báo một số biến cục bộ và sử dụng nó trên toàn bộ trang. Điều này có thể giải quyết như thế nào?

Có vẻ khá tầm thường khi có thể thực hiện hành động sau:

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

Nhưng điều này không làm việc. Điều này có thể không?

Câu trả lời:


521

Tôi nghĩ bạn đã khá thân thiết, hãy thử điều này:

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

oh chết tiệt, tôi đã cố gắng mọi công việc có thể xung quanh nhưng điều này. Cảm ơn anh!
vondip

Làm thế nào để bạn làm điều này trong VB.NET?
Stefan Paul Noack

7
ồ, tôi tự tìm ra nó: @Code .. End Codethay vì@{ .. }
Stefan Paul Noack

1
@ Abhijeet.Nagre, trong câu hỏi anh ta viết: @bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);nhưng định nghĩa biến phải nằm trong một "khối mã". Tôi không thể đưa ra câu trả lời tốt hơn cho lý do tại sao sau đó, đó chỉ là cách dao cạo hoạt động.
Tomas Jansson

2
@AbhijeetNagre - Dao cạo thường khá giỏi trong việc hiểu mã bắt đầu và kết thúc ở đâu, nhưng nó không hoàn hảo. Đôi khi chúng ta chỉ cần cung cấp cho nó một gợi ý nhỏ về những gì nên được coi là Dao cạo / C # và những gì không nên. Nếu bạn từng gặp lỗi Dao cạo, việc thêm { }thẻ thường là bước đầu tiên
Câu chuyện Jon

50

Tôi nghĩ rằng các biến nên trong cùng một khối:

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

Đó dường như là trường hợp, trong MVC3 ít nhất.
Matthew Walton

1
Thông minh! Bất kỳ ý tưởng làm thế nào bạn sẽ sử dụng biến isUserConnectedmột lần nữa xuống trang?
SharpC

@SharpC Khi bạn khai báo một biến như thế, nó có sẵn trong phần còn lại của tệp .cshtml đó. Sau đó trong tệp bạn có thể làm một cái gì đó như @if (isUserConnected) { /* stuff if connected */ }hoặc <div>Connected? @isUserConnected</div>(điều này hoạt động tốt hơn với chuỗi). Mặc dù vậy, nó không có sẵn bên ngoài tệp đó (ví dụ: bạn sẽ phải khai báo riêng trong các phần).
Dan Mangiarelli

18

Bạn cũng có thể dùng:

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

Không cần một biến trong mã


6
Điều này không cung cấp câu trả lời cho câu hỏi.
Owen Pauling

13

Nếu bạn đang tìm kiếm một biến int, một biến tăng theo vòng lặp mã, bạn có thể sử dụng một cái gì đó như thế này:

@{
  int counter = 1;

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

12

Không phải là một câu trả lời trực tiếp cho vấn đề của OP, nhưng nó cũng có thể giúp bạn. Bạn có thể khai báo một biến cục bộ bên cạnh một số html trong phạm vi mà không gặp sự cố.

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

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

đây là những gì tôi đang tìm kiếm cảm ơn bạn !!
Ninjanoel

2

để khai báo một var được truy cập trên trang. Ở đầu trang thường nó hoạt động. Ngấm ngầm hoặc rõ ràng sự lựa chọn của bạn.

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


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

1

bạn có thể đặt mọi thứ trong một khối và dễ dàng viết bất kỳ mã nào bạn muốn trong khối đó chính xác theo mã dưới đây:

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

ban đầu nó giúp bạn có mã sạch hơn và bạn cũng có thể ngăn trang của mình tải nhiều lần các khối mã khác nhau

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.