asp.net-mvc - textboxfor - validation asp net mvc
El valor de ViewBag.Title reemplaza a Model.Title para la plantilla del editor MVC de ASP.NET (3)
El valor utilizado por Html.EditorFor
puede provenir de tres lugares: ModelState
, ModelState
y Model
. Por cierto, ViewBag
y ViewBag
son la misma cosa, dos formas de interactuar con el mismo diccionario subyacente.
Por lo tanto, para evitar conflictos al trabajar con formularios, puede usar el Modelo en su lugar o un prefijo, como ViewBag._Title
.
En este caso, ViewBag.Title
se utiliza para compartir datos con el diseño, también puede hacer Page.Title
sin preocuparse por cambiar los datos de visualización.
Cuando configuro ViewBag.Title
en la parte superior de una plantilla de Razor, el cuadro de texto de la plantilla del editor Model.Title
se rellena con el valor de ViewBag.Title
lugar del valor esperado de Model.Title
. Llamar a Html.EditorFor(x => Model.Title)
explícitamente no produce este comportamiento.
¿Cómo puedo evitar que mi plantilla de editor muestre el valor de ViewBag.Title
sin mantener una plantilla de editor personalizada para mi modelo?
Código
@{
ViewBag.Title = "Edit Post " + Model.Title;
}
@Html.EditorFor(x => Model.Title) @* renders "My Title" text box *@
@Html.EditorFor(x => Model) @* renders "Edit Post My Title" text box *@
La forma fácil de evitar esto es simplemente no usar ViewBag
.
ViewBag
es un objeto dinámico y tiene prioridad. Pero puedes meter casi cualquier cosa allí y se vuelve difícil de depurar.
Línea inferior: si necesita mostrar algo dinámico como un título, póngalo en su Model
.
Mover la asignación de ViewBag.Title
al final de la página funcionó para mí.