So che l'ho già visto prima. Non riesco a ricordare se si trattasse di una demo del modello C4MVC o di un generatore di input! Ho bisogno di sapere come posso usare la convenzione di Camel per modificare le proprietà del mio modello di vista e avere la "proprietà CamelCasedProperty" resa nell'etichetta come "Proprietà del contenitore Camel". Questo dovrebbe essere gestito dalla creazione di un nuovo wizard di visualizzazione piuttosto che gestirlo in modo programmatico.In ASP.NET MVC, come faccio a visualizzare un nome di proprietà come un'etichetta che si divide su CamelCase
risposta
Dopo un po 'di tentativi, ho trovato un indizio su ciò che mi interessava fare. Guardando questo C4MVC video. Sono certo che questo potrebbe essere già completato in MVC Contrib come generatore di input. Tuttavia, sono molto interessato a comprendere tutte le puntellature per così dire per imparare tutto quello che posso per my upcoming book "ASP.NET MVC Cookbook" (shameless plug for public review). Ecco la soluzione che mi è venuta in mente che richiede solo il rinominare Html.LabelFor per Html.LabelFor2 nel formato di codice generato "create new view":
Ho creato un metodo per ottenere il nome della proprietà dal passato in lambda. Ho quindi creato un altro metodo per analizzare il nome della proprietà nelle lettere maiuscole contenute nel nome.
using System;
using System.Linq.Expressions;
using System.Text.RegularExpressions;
namespace FuryPartners.WebClient.Helpers
{
public class HelperUtilities
{
internal static string PropertyName<T, TResult>(Expression<Func<T, TResult>> expression)
{
switch (expression.Body.NodeType)
{
case ExpressionType.MemberAccess:
var memberExpression = expression.Body as MemberExpression;
return memberExpression.Member.Name;
default:
return "oops";
}
}
internal static string SplitCamelCase(string camelCaseString)
{
string output = System.Text.RegularExpressions.Regex.Replace(
camelCaseString,
"([A-Z])",
" $1",
RegexOptions.Compiled).Trim();
return output;
}
}
}
Ho poi esteso HtmlHelper avere un metodo LabelFor2 che costruisce e passa fuori il formato di visualizzazione appropriato di un nome di proprietà.
using System;
using System.Linq.Expressions;
using System.Web.Mvc;
namespace FuryPartners.WebClient.Helpers
{
public static class LabelHelpers
{
public static MvcHtmlString LabelFor2<T, TResult>(this HtmlHelper<T> helper, Expression<Func<T, TResult>> expression)
{
string propertyName = HelperUtilities.PropertyName(expression);
string labelValue = HelperUtilities.SplitCamelCase(propertyName);
string label = String.Format("<label for=\"{0}\">{1}</label>", propertyName, labelValue);
return MvcHtmlString.Create(label);
}
}
}
Non credo che ciò che si vuole è possibile in vaniglia ASP.NET MVC 2.
In ASP.NET MVC 2 che serve per decorare il vostro modello con un attributo DisplayName con il testo che si desidera e poi il la procedura guidata generata automaticamente utilizzerà LabelFor
per generare l'etichetta per la proprietà. Ad esempio:
class MyModel()
{
[DisplayName("Your Property Name")]
public string YourPropertyName { get; set; }
}
Poi nella vista:
<%= Html.LabelFor(m => m.YourPropertyName) %>
Se avete visto una demo di esso che è fatto qualche altro modo avrebbe potuto essere dal progetto MvcContrib per InputBuilders.
Ecco link al parte del progetto Credo che il tuo riferimento a:
Il testo evidenziato in rosso sono le etichette che vengono dal tipo di modello. L'etichetta viene creata dall'oggetto PropertyInfo che rappresenta le rispettive proprietà della modalità.
L'etichetta è Nome proprietà.
L'etichetta è il nome proprietà diviso nel nome della proprietà del caso pascal.
L'etichetta viene specificata utilizzando l'attributo Etichetta applicato alla proprietà.
+1 Grazie per le informazioni! L'attributo DisplayName fa certamente quello che voglio in quanto mi consente di sovrascrivere il nome delle proprietà durante la generazione dell'interfaccia utente. Pensavo di aver visto qualcosa di simile a un modello T4 o qualcosa che non richiedesse molto lavoro aggiuntivo per dividere il caso del cammello. –
Controlla i link che ho postato, mostrano esempi di esso in azione ma non è incorporato nella scatola. – Kelsey
Anche se il codice che ho inserito nella mia risposta fa quello che ho chiesto ... Penso che la tua risposta sia più corretta in quanto punta a risorse esterne e progetti di proprietà pubblica! Segnerò la tua risposta come il vincitore della cena di pollo! Grazie per l'aiuto. –
ho una nuova versione più semplice per creare un'etichetta titolo-izzato dal Andrews risposta, utilizzando il codice MVC2 a rispettare qualsiasi [DisplayName (...)] Attribuisce
public static class LabelHelpers
{
public static MvcHtmlString LabelTitleizeFor<T, TResult>(this HtmlHelper<T> helper, Expression<Func<T, TResult>> expression)
{
string propertyName = ExpressionHelper.GetExpressionText(expression);
if (propertyName.IndexOf(".") > 0)
{
propertyName = propertyName.Substring(propertyName.LastIndexOf(".") + 1);
}
string labelValue = ModelMetadata.FromLambdaExpression(expression, helper.ViewData).DisplayName;
if (string.IsNullOrEmpty(labelValue))
{
labelValue = Inflector.Net.Inflector.Titleize(propertyName);
}
string label = String.Format("<label for=\"{0}\">{1}</label>", propertyName, labelValue);
return MvcHtmlString.Create(label);
}
}
utilizzando https://github.com/srkirkland/Inflector/blob/master/Inflector/Inflector.cs
Ho migliorato questo aggiungendo il seguente codice tra l'impostazione delle proprietà propertyName e labelValue: if (propertyName.IndexOf (".")> 0) { propertyName = propertyName.Substring (propertyName.LastIndexOf (".") + 1); } – daveywc
Ho modificato per aggiornare il link Codice Google guasto a un mirror GitHub. Nel caso in cui sia offline, la libreria su cui si basa questa risposta è chiamata 'Inflector' ed è disponibile su NuGet:' Install-Package Inflector' o 'Install-Package Inflector.Portable'. Non esiste uno spazio dei nomi '.Net' nella versione NuGet, quindi chiamiamolo come' Inflector.Inflector.Titleize (propertyName); '. –
Ampliando Jason More's answer, ecco uno con sovraccarichi di attributi HTML.
Il pacchetto NuGet con licenza MIT Inflector
è richiesto: Install-Package Inflector
.
utilizzo Esempio:
Html.LabelTitleizeFor(model => model.FirstName)
Html.LabelTitleizeFor(model => model.FirstName, htmlAttributes: new { @class="control-label col-md-2" })
public static class HtmlHelperExtensions
{
public static MvcHtmlString LabelTitleizeFor<T, TResult>(this HtmlHelper<T> helper, Expression<Func<T, TResult>> expression)
{
return LabelTitleizeHelper(helper, expression, null);
}
public static MvcHtmlString LabelTitleizeFor<T, TResult>(this HtmlHelper<T> helper, Expression<Func<T, TResult>> expression, IDictionary<string, object> htmlAttributes)
{
return LabelTitleizeHelper(helper, expression, htmlAttributes);
}
public static MvcHtmlString LabelTitleizeFor<T, TResult>(this HtmlHelper<T> helper, Expression<Func<T, TResult>> expression, object htmlAttributes)
{
return LabelTitleizeHelper(helper, expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}
private static MvcHtmlString LabelTitleizeHelper<T, TResult>(HtmlHelper<T> html, Expression<Func<T, TResult>> expression, IDictionary<string, object> htmlAttributes = null)
{
string propertyName = ExpressionHelper
.GetExpressionText(expression)
.Split('.')
.Last();
if (string.IsNullOrEmpty(propertyName))
return MvcHtmlString.Empty;
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
string labelValue = metadata.DisplayName ?? Inflector.Inflector.Titleize(propertyName);
TagBuilder tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyName)));
tagBuilder.SetInnerText(labelValue);
tagBuilder.MergeAttributes(htmlAttributes, true);
return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
}
}
Questo codice è Unlicense licenza (libero di utilizzare e cambiare in qualsiasi contesto senza attribuzione).
- 1. Come si clona un oggetto JavaScript dalle proprietà PascalCase alle proprietà camelCase (in JavaScript)?
- 2. Come faccio a visualizzare un PDF utilizzando PdfSharp in ASP.Net MVC?
- 3. MVC JsonResult camelCase serialization
- 4. ASP.Net MVC Come visualizzare una proprietà immagine di un modello in una vista?
- 5. Come si associa a un elenco come una proprietà su un modello in Rasoio MVC 3?
- 6. Come faccio a visualizzare un albero di cose in Bash?
- 7. Come faccio a visualizzare NSTextFinder
- 8. Come visualizzare Web Reportser di Active Reports in ASP.NET MVC
- 9. Come faccio a visualizzare un CalendarView in un AlertDialog?
- 10. ASP.NET MVC ValidationAttribute Ottiene l'altro nome visualizzato di proprietà
- 11. Come faccio a visualizzare la casella Informazioni su C#?
- 12. Come visualizzare AppSettings in un'applicazione Web ASP.NET MVC?
- 13. Split camelCase Nome colonna
- 14. Come ottenere un numero decimale quando si divide in bc?
- 15. In Emacs, come faccio a visualizzare un messaggio nel minibuffer con le proprietà del carattere?
- 16. Come faccio a visualizzare ProgressDialog usando Fragment
- 17. Come si mantengono i valori di querystring in asp.net mvc?
- 18. Come convalidare due proprietà con ASP.NET MVC 2
- 19. Come si divide NSString in componenti?
- 20. API Web ASP.NET - XML in camelcase
- 21. Come faccio a riprodurre in streaming un file video utilizzando ASP.NET MVC?
- 22. Come si costruisce un percorso senza ViewContext in ASP.NET MVC?
- 23. File di flusso che utilizza ASP.NET MVC FileContentResult in un browser con un nome?
- 24. Come visualizzare semplici collegamenti HTML nel ciclo MVC Asp.Net?
- 25. Come chiamare il nome percorso in Html.ActionLink asp.net MVC?
- 26. Errore MVC ASP.NET: "Nome '__o' non dichiarato."
- 27. Test unitario in asp.net MVC, come faccio a prendere in giro una richiesta di pagina?
- 28. Come si modifica un valore in ModelState, in modo che sia valido, utilizzando ASP.NET MVC?
- 29. Come si impedisce la serializzazione JSON in ASP.NET MVC?
- 30. Come accedere a un servizio WCF in un'applicazione ASP.Net MVC?
Se questa domanda ti interessa, dai un'occhiata alla recensione pubblica del mio ultimo libro "Libro di ricette ASP.NET MVC 2" qui: http://groups.google.com/group/aspnet-mvc-2-cookbook- recensione Grazie! –
fyi - questo è PascalCase non camelCase – Rob