Quindi, vorrei suggerire è di passare a utilizzare viewmodels piuttosto che il ViewBag. Ho creato una cartella nel mio progetto, denominata ViewModels, e in seguito creo alcune sottocartelle, come appropriato, dove ho inserito i miei vari viewmodels.
Se si crea una classe ViewModel in questo modo:
public class MyViewModel
{
public string CompName { get; set; }
}
poi nella vostra azione di controllo è possibile creare uno di quelli e popolare, forse da qualche modello esistente tirato da un database. Impostando la proprietà CompName
nel viewmodel, avrà quel valore nella vista. E allora la vostra vista può essere simile a questa:
@model MyNamespace.ViewModels.MyViewModel
@Html.EditorFor(model => model.CompName)
o @Html.TextBoxFor
avrebbe funzionato troppo.
Poi di nuovo nella vostra azione di controllo sul palo, hai qualcosa di simile:
[HttpPost]
public ActionResult MyAction(MyViewModel viewModel)
{
...
// do whatever you want with viewModel.CompName here, like persist it back
// to the DB
...
}
potrebbe essere che si usa qualcosa come automapper per mappare i vostri modelli e ViewModels ma si potrebbe certamente farlo manualmente anche se l'intera faccenda di mano destra/sinistra diventa piuttosto noiosa.
Rende le cose molto più semplici se lo fai in questo modo e non funziona molto.
Aggiornamento
Ma, se si davvero desidera passare tale valore secondo la ViewBag, si potrebbe fare questo:
Nella vostra azione di controllo:
ViewBag.CompName = "Some Name";
Quindi a tuo avviso:
@Html.TextBoxFor(model =>model.Comps.CompName, new {@Value = ViewBag.CompName})
E questo pre-popolerà la casella di testo con "Qualche nome".
Continuerò comunque con l'approccio viewmodel, ma questo sembra funzionare abbastanza bene. Spero possa aiutare!
Grazie per la sua risposta itsmatt.Il viewbag è nella mia azione di concorso get-enter e prende il nome dal mio modello "Competition" (c'è anche un modello CompetitionEntry (.) È così che posso visualizzare il nome della competizione in cima al modulo di iscrizione. modello Ho una proprietà di navigazione "Competizioni di competizione virtuale pubblica" .Pensavo che ci sarebbe stato facile precompilare il TextBox di CompetitionEntry.CompName con quello che si trova nel viewbag. Non voglio cambiare i miei modelli in questa fase per essere onesti, sai di un modo per farlo nella vista? Grazie ancora. – Dan
Dan, guarda il mio aggiornamento alla fine della mia risposta. Sembra che funzioni abbastanza bene nel mio progetto di test – itsmatt
Non riuscirò a prova questo per un'ora circa, ti scriverò quando lo farò Grazie per tutto ciò che aiuti matt! – Dan