2011-12-18 36 views
21

Tôi đang sử dụng một nếu khác trong Razor view để kiểm tra giá trị null như thế này:lệnh if khác trong Razor không hoạt

@foreach (var item in Model) 
    { 
     <tr id="@(item.ShopListID)"> 
      <td class="shoptablename">@Html.DisplayFor(modelItem => item.Name) 
      </td> 
      <td class="shoptableamount"> 
       @if (item.Amount == null) 
       { 
        Html.Display("--"); 
       } 
       else 
       { 
        String.Format("{0:0.##}", item.Amount); 
       } 
      </td> 
     </tr> 

    } 

Tuy nhiên, bất kể số lượng mô hình của tôi là null hoặc có một giá trị, html rendered không chứa bất kỳ giá trị nào trong số tiền.

Tôi tự hỏi tại sao điều này lại xảy ra. Bất kỳ ý tưởng?

Thanks ...

EDIT:

Quyết định đã làm nó trong bộ điều khiển:

// Function to return shop list food item amount 
    public string GetItemAmount(int fid) 
    { 
     string output = ""; 

     // Select the item based on shoplistfoodid 
     var shopListFood = dbEntities.SHOPLISTFOODs.Single(s => s.ShopListFoodID == fid); 

     if (shopListFood.Amount == null) 
     { 
      output = "--"; 
     } 
     else 
     { 
      output = String.Format("{0:0.##}", shopListFood.Amount); 
     } 
     return output; 
    } 

và gọi tại Xem như:

<td class="shoptableamount"> 
       @Html.Action("GetItemAmount", "Shop", new { fid = item.ShopListFoodID }) 
      </td> 
+0

Bạn sẽ phải cho chúng tôi biết chính Mô hình trông như thế nào, cụ thể là trường Model.Amount. Có lẽ hãy thử @if (string.IsNullOrEmpty (item.Amount) thay thế? –

+0

Xin cảm ơn sự giúp đỡ của bạn, nhưng số lượng là một số thập phân và nếu tôi làm theo một u đã nêu ở đây, nó không hoạt động. Tôi quyết định làm điều đó trong bộ điều khiển Cảm ơn bạn :) – shennyL

+0

Nếu kết hợp khác thực sự không hoạt động trong dao cạo. – Anderson

Trả lời

58

Bạn phải sử dụng các @()

  @if (item.Amount == null) 
      { 
       @("--"); 
      } 
      else 
      { 
       @String.Format("{0:0.##}", item.Amount) 
      } 

Như đã lưu ý trong các nhận xét và câu trả lời khác, Html.Display không phải để hiển thị chuỗi, nhưng để hiển thị dữ liệu từ ViewData từ điển hoặc từ Model. Đọc http://msdn.microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0

+0

Câu trả lời của bạn hoạt động nếu tôi làm điều này trong dao cạo: @if (item.Amount == null) { @ Html.Display ("-") } Nhưng tôi không thể có được công việc kiểm tra rỗng, vì vậy tôi quyết định làm điều đó trong bộ điều khiển thay thế. Cảm ơn! – shennyL

+1

@shennyL xem câu trả lời của tôi và câu trả lời của bước nhảy vọt. Tôi không nghĩ phương thức 'Display()' đang làm những gì bạn nghĩ nó đang làm. –

+0

@shennyL, như @Shark chỉ ra, bên cạnh thiếu '@' để thực sự xuất ra một cái gì đó, 'Html.Display' không làm những gì bạn nghĩ là .. –

6

Tôi nghĩ bạn muốn hiển thị "-----" nếu số tiền bằng không.

@foreach (var item in Model) 
    { 
     <tr id="@(item.ShopListID)"> 
      <td class="shoptablename">@Html.DisplayFor(modelItem => item.Name) 
      </td> 
      <td class="shoptableamount"> 
       @if (item.Amount == null) 
       { 
        @Html.Raw("--") 
       } 
       else 
       { 
        String.Format("{0:0.##}", item.Amount); 
       } 
      </td> 
     </tr> 

    } 
1

Đó là do bạn đang sử dụng phương pháp Display() không chính xác. Quá tải bạn đang sử dụng là Display(HtmlHelper, String). Nếu bạn đang tìm kiếm "-" làm văn bản, bạn nên sử dụng một cái gì đó như:

@Html.Label("--"); 
1

Có hai cách khác để hiển thị văn bản từ một khối mã trong dao cạo bên cạnh đề xuất @ ("") , sử dụng thẻ văn bản <> và viết tắt là @:

@{ 
     @("--") 
     <text>--</text> 
     @:-- 
    } 

Mã trên sẽ hiển thị - ba lần.

Các vấn đề liên quan