ho usato ponteggi per generare i punti di vista e controller per me e sto usando il codice EF prima sintassi.Come arrivare testo segnaposto in input HTML in una vista ponteggi utilizzando display attributo (prompt) oltre la classe del modello
Capisco che i modelli T4 sono responsabili dell'implementazione dei valori degli attributi nel codice HTML/vista generato, ma non vedo il modello di scaffold predefinito disponibile con VS 2015 community edition
che fa qualcosa per il testo segnaposto.
Per la mia comprensione su di decorare una proprietà modello con [Display(Prompt="some placeholder text")]
risultati degli attributi nel some placeholder text
visualizzato come segnaposto per la casella di testo di input nelle creare/modificare vista.
Ma con mio sgomento, questo non succede.
C'è qualche altro attributo? o qualcos'altro che devo fare? o perché ho usato scaffolding per generare viste? o il modello T4 predefinito non sta facendo il suo lavoro molto bene?
Il mio codice per la classe del modello si presenta come di seguito:
public class Status
{
public int ID { get; set; }
[Required(ErrorMessage ="Status Name is needed!")]
[Display(Name ="Status Name",Prompt ="Type something here!")]
public string StatusName { get; set; }
[Required]
public string Description { get; set; }
}
Di seguito si riporta il codice vista generato:
@model LunchFeedback.Models.Status
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Status</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.StatusName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.StatusName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.StatusName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Edit:
Sono ben consapevole che modificando direttamente il visualizzare il file e aggiungere un segnaposto lì può fare il lavoro.
@Html.EditorFor(model => model.StatusName, new { htmlAttributes = new { @class = "form-control", placeholder = "Type something here!" } })
Ma voglio controllare tutte le cose dal modello e voglio usare scaffolding. Preferibilmente anche modificare/personalizzare il modello T4 per farlo.
La proprietà 'Prompt' di' DisplayAttribute' e il valore della proprietà 'ModelMetadata.Watermark'. Se non viene utilizzato per generare un attributo 'placeholder =" .. "' in un input. –
@StephenMuecke e il modello MVC predefinito non utilizzano la proprietà 'ModelMetadata.Watermark' quando si creano le viste? – DhruvJoshi
No, non lo è. Dal [blog di Brad Wilson] (http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html) - _ "Testo che potrebbe essere visualizzato come filigrana quando si modifica questo modello in una casella di testo. Predefinito: null "_. Sembrerebbe ragionevole aver usato questa proprietà per generare l'attributo 'placeholder', ma presumo che il team MVC voglia solo che sia un po 'più flessibile e lasci allo sviluppatore decidere cosa fare con esso (cioè quando crei il tuo proprio personalizzato 'EditorTemplates'). –