2011-12-18 12 views
21

Sto utilizzando un if else in vista del rasoio per verificare la presenza di valore nullo in questo modo:if altro rasoio non funziona

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

    } 

Tuttavia, non importa la mia somma modello è nullo o avere un valore, il html reso non contiene alcun valore nella quantità.

Mi chiedo perché questo sta accadendo. Qualche idea?

Grazie ...

EDIT:

Abbiamo deciso di ha fatto nel controllore:

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

e chiamare il paesaggio come:

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

Dovresti mostrarci come si presenta il Modello stesso, in particolare il campo Model.Amount. Forse prova @if (string.IsNullOrEmpty (item.Amount) invece? –

+0

Ciao grazie per il tuo aiuto, ma l'importo è un decimale e se seguo quello che hai dichiarato qui, non ha funzionato, comunque fai riferimento alla mia modifica perché Ho deciso di farlo in controller Grazie :) – shennyL

+0

Se la combinazione di altri in effetti non funziona in rasoio. – Anderson

risposta

58

Devi usare la @()

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

Come indicato nei commenti e altre risposte, lo Html.Display non è per la visualizzazione di stringhe, ma per la visualizzazione di dati dal dizionario ViewData o da un Model. Leggi http://msdn.microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0

+0

La tua risposta funziona se faccio questo in rasoio: @if (item.Amount == null) { @ Html.Display ("-") } Ma non posso ottenere il controllo nullo funziona, quindi ho deciso di fallo invece nel controller. Grazie! – shennyL

+1

@shennyL controlla la mia risposta e la risposta di dotnetstep. Non penso che il metodo 'Display()' stia facendo quello che pensi che stia facendo. –

+0

@shennyL, come sottolinea @Shark, oltre al '@' mancante per l'output effettivo di qualcosa, 'Html.Display' non stava facendo quello che pensavi che fosse .. –

6

Penso che si desidera visualizzare "-----" se l'importo è nullo.

@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

Questo perché si sta utilizzando il metodo Display() in modo non corretto. Il sovraccarico che stai utilizzando è Display(HtmlHelper, String). Se siete alla ricerca di "-" per essere il testo, si dovrebbe usare qualcosa di simile:

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

In realtà ci sono altri due modi per visualizzare il testo da un blocco di codice nel rasoio oltre al @ suggerito ("") , utilizzando un < text> tag ed è @ stenografia:

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

Il codice di cui sopra visualizzerà - tre volte.

Problemi correlati