2011-12-18 12 views
21

Używam if else w świetle Razor aby sprawdzić wartość null jak ten:jeśli else w Razor nie funkcjonuje

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

    } 

Jednak bez względu na mój kwota model jest zerowy lub posiadające wartość, Wyrenderowany w html nie zawiera żadnej wartości.

Zastanawiam się, dlaczego tak się dzieje. Dowolny pomysł?

Dzięki ...

EDIT:

Postanowiliśmy zrobił to w kontrolerze:

// 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; 
    } 

i zadzwonić na widok jak:

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

Będziesz musiał pokazać nam, jak wygląda sam Model, szczególnie pole Model.Amount. Może wypróbujesz @if (string.IsNullOrEmpty (item.Amount) zamiast? –

+0

Cześć dzięki za twoją pomoc, ale kwota jest dziesiętna i jeśli podążę za tą, o której tutaj mowa, to nie działała. W każdym razie, proszę odwołaj się do mojej edycji, ponieważ Decyduję się zrobić to w kontrolerze :) dziękuję :) – shennyL

+0

Jeśli jeszcze kombinacja rzeczywiście nie działa w brzytwie. – Anderson

Odpowiedz

58

Musisz użyć @()

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

Jak zauważył w komentarzach i innych odpowiedzi The Html.Display nie jest do wyświetlania struny, ale do wyświetlania danych ze Słownika ViewData lub z Model. Przeczytaj http://msdn.microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0

+0

Twoja odpowiedź działa, jeśli mogę to zrobić w maszynce: @if (item.Amount == null) { @ Html.Display ("-") } Ale nie mogę dostać zerowej prace kontrolne, więc postanowiłem zrób to w kontrolerze. Dzięki! – shennyL

+1

@shennyL sprawdź moją odpowiedź i odpowiedź dotnetstep. Nie sądzę, że metoda 'Display()' robi to, co myślisz, że robi. –

+0

@shennyL, jak zaznacza @Shark, oprócz brakującego '@' do wyprowadzenia czegoś, 'Html.Display' nie robi tego, co myślałeś, że było .. –

6

Myślę, że chcesz wyświetlić "-----", jeśli kwota jest zerowa.

@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

Dzieje się tak, ponieważ niepoprawnie używasz metody Display(). Przeciążenie, którego używasz, to Display(HtmlHelper, String). Jeśli szukasz „-” aby być tekst, należy użyć coś takiego:

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

Są to właściwie dwa inne sposoby wyświetlania tekstu z bloku kodu w maszynce oprócz sugerowanej @ („”) używając < tekst> tag i jest skrótowym @:

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

powyższy kod wyświetli - trzy razy.

Powiązane problemy