2012-06-15 10 views
10

que tienen el siguiente modelo:ASP.Net [HiddenInput] ¿El atributo de datos no funciona cuando se procesa con Html.EditorForModel en Razor?

public class Product 
{ 
    [HiddenInput(DisplayValue = false)] 
    public int ProductID { get; set; } 

    [Required(ErrorMessage="Please enter a product name")] 
    public string Name { get; set; } 

    [Required(ErrorMessage="Please enter a description")] 
    [DataType(DataType.MultilineText)] 
    public string Description { get; set; } 

    [Required] 
    [Range(0.01, double.MaxValue, ErrorMessage="Please enter a positive price")] 
    public decimal Price { get; set; } 

    [Required(ErrorMessage="Please specify a category")] 
    public string Category { get; set; } 

    public byte[] ImageData { get; set; } 

    [HiddenInput(DisplayValue = false)] 
    public string ImageMimeType { get; set; } 
} 

estoy referenciación System.Web.Mvc y System.ComponentModel.DataAnnotations.

estoy a continuación, generar esto en mi punto de vista de la siguiente manera:

<h1>Edit @Model.Name</h1> 

@using (Html.BeginForm("Edit", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })) { 
@Html.EditorForModel() 

<div class="editor-lable">Image</div> 
<div class="editor-=field"> 
    @if (Model.ImageData == null) 
    { 
     @:None 
     } 
    else 
    { 
     <img width="150" height="150" src="@Url.Action("GetImage", "Product", new { Model.ProductID })" /> 
    } 
    <div>Upload new image: <input type="file" name="Image" . /></div> 
</div> 
<input type="submit" value="Save" /> 
@Html.ActionLink("Cancel and return to List", "Index") 

}

El problema es que mientras que las anotaciones [Required] están funcionando correctamente los campos [HiddenInput] no son en realidad esconden. La fuente html ni siquiera tiene el atributo oculto apareciendo.

¿Por qué no está Html.EditorForModel aplicando el atributo [HiddenInput] a esas propiedades? ¿Algunas ideas?

+0

Esto debería funcionar. No puedo reproducir el problema. –

+0

tengo exactamente el mismo problema –

Respuesta

1

Si usa andamios, el generador configurará la etiqueta de entrada con el tipo oculto en su vista. Esto depende de la plantilla T4.

Si crea la vista manualmente, debe establecer el campo manualmente. por ejemplo

@Html.HiddenFor(model => model.Id) 
7

tuve un problema similar, en mi caso el problema fue causado por la referencia System.Web.Mvc.

estaba creando una aplicación MVC 3, pero en lugar de añadir la versión 3 de la System.Web.Mvc añadí la versión 4.

+2

Muchas gracias, tuve el problema para MVC4 y MVC5 – Arvand

2

En mi caso la causa de este problema fue que la clase modelo de ensamblaje que contiene y el proyecto de la aplicación web principal tenía referencias a diferentes versiones del ensamblado System.Web.Mvc.

Si tiene un par de proyectos que hagan referencia al ensamblado System.Web.Mvc, asegúrese de que la versión utilizada sea la misma en todos los proyectos.

2

Tuve el mismo problema.

Resultó que tenía la versión 5.2.2.0 de System.Web.Mvc en el proyecto que contenía el modelo y 5.2.0.0 en el proyecto de la aplicación web.

Para instalar la versión correcta que necesita para ejecutar lo siguiente en NuGet paquete Mananger:

install-package Microsoft.Aspnet.Mvc ProjectName -version X

sustitución Nombre del Proyecto con el nombre de su proyecto y X con la versión que necesita para instalar .

Por ejemplo:

install-package Microsoft.Aspnet.Mvc TestProject.Web -version 5.2.2.0

Si se omite el número de versión, NuGet simplemente se descarga e instala la última versión.

Una vez que hice esto, también tuve que actualizar mi proyecto de prueba de unidad para que estuviera en la misma versión que el proyecto de aplicación web. Es posible que deba hacer lo mismo.

9

Y en mi caso tuve que escribir el [HiddenInput] como [HiddenInput(DisplayValue=false)]

+0

¡Esto funciona para mí! – Hendry

+2

A partir de MVC 5, esto también funcionó para mí. –

0

Yo también tuve este problema. El problema estaba ocurriendo debido a las diferentes versiones de System.Web.Mvc en diferentes proyectos de la misma solución. Quité y agregué las referencias nuevamente para que sea igual para todos los proyectos (4.0.0.1).

Cuestiones relacionadas