Qual è la differenza tra @ Html.ValueFor (x => x.PropertyName) e @ Model.PropertyName

@Html.ValueFor(x=>x.PropertyName) @Model.PropertyName 

Sembra che questi due comandi Razor facciano la stessa identica cosa. C’è qualche circostanza o beneficio speciale nell’usare l’uno sull’altro?

ValueFor richiama il modello esistente per il rendering del tipo di proprietà. Per impostazione predefinita, questo modello può essere semplice come ToString() , ma è ansible definire qualsiasi cosa come modello.

@Model.PropertyName presenterà semplicemente il valore come stringa.

@Html.ValueFor(x => x.PropertyName) richiama molto un codice e una riflessione sotto il cofano.
Ti consentirà di personalizzare il modo in cui viene presentato il valore e di avere un formato coerente nell’intero sito. Ad esempio, se la tua proprietà è decorata con DisplayFormatAttribute .

@Model.PropertyName sta letteralmente ottenendo direttamente il valore della proprietà, chiamando ToString () su di esso e HTML che esegue l’escape del risultato. Non verrà eseguita altra formattazione.

Per illustrare, potresti vedere questo:

 [DisplayFormat(DataFormatString="{0:C}")] public decimal PropertyName = 1234.56; @Html.ValueFor(x => x.PropertyName) => "£1,234.56" @Model.PropertyName => "1234.56"