Esto es como MVC 101 aquí, así que me siento totalmente impotente sobre por qué esto no está funcionando. Tengo una muy básico, Modelo:

public class StockEnrollmentModel
{
    [Required]
    [DisplayName("Employee Name:")]
    public string EmployeeName { get; set; }

}

Mi punto de vista se parece a esto:

@using (Html.BeginForm("SimulateForm", "HR", FormMethod.Post))
{
<div class="row">
    <div class="col-md-6">
        <div class="form-group">
            @Html.LabelFor(e => e.EmployeeName)
            @Html.TextBox("stock_employee_name", Model.EmployeeName)
        </div>
    </div>
</div>
<button type="submit" class="btn btn-primary" value="Submit">Submit</button>
}

El servicio web voy a publicar para que se necesitan nombres para los campos de entrada para recibir correctamente los datos

Como en el html renderizado necesita leer:

<input type="stock_employee_name" type="text" /> 

Después de mucho googlear, he decidido que tengo que usar Html.Cuadro de texto con el fin de tener el control de el nombre del atributo que se genera.

El problema que estoy teniendo es que cuando yo envíe el formulario, el modelo en mi controlador está completamente vacío de datos. La investigación de esta muestra que el formulario publicado en el servidor con «employee_stock_name=algo de Nombre» en lugar de «EmployeeName=Algunos Nombre de»

De mi investigación, esto no debería estar pasando, ¿correcto?? Esta misma situación se debe a la razón de que el uso de cuadro de texto en lugar de TextBoxFor.

Lo que me estoy perdiendo?

Aquí está mi controlador para lo que vale la pena:

[HttpPost]
    public RedirectToRouteResult SimulateForm(StockEnrollmentModel model )
    {
        if ( ModelState.IsValid )
        {
            return RedirectToAction("SignForm", "HR", model);
        }
        return RedirectToAction("StockPurchase", model );
    }

ACTUALIZACIÓN

La aceptó contestar a continuación fue lo que al final he acabado usando. No hay una manera fácil de cambiar el nombre del campo HTML y mantener el modelo MVC de unión. Terminé cambiando mi los nombres de propiedad para que coincida con lo que yo necesitaba el campo nombre para leer.

  • Has probado a utilizar @Html.TextBoxFor en lugar de @Html.TextBox con identificación personalizada?
  • Yo no, pero como se dijo, el webservice estoy publicando requiere el nombre de campo especificado valores
  • Como valor inicial o valor que no debe ser cambiado?
  • Como en el renderizado de html necesita leer <input name=»employee_stock_name» tipo=»texto» />
  • Así que no es sobre el valor, pero el nombre de control de cuadro de texto – debe ser este valor específico? Cambiar el nombre del campo en la clase del modelo y el uso TextBoxFor.
  • Que es el bloque de código primer bloque de código en el post.
  • ¿Qué servicio web te refieres? El único método que ha demostrado es [HttpPost] SimulateForm(StockEnrollmentModel model) donde el parámetro es typeof StockEnrollmentModel que tiene una propiedad denominada EmployeeName así, para que este a enlazar el cuadro de texto debe ser name="EmployeeName"

InformationsquelleAutor Icestorm0141 | 2015-05-20

3 Comentarios

  1. 3

    El primer parámetro de la HtmlHelper.Cuadro de texto función es el atributo name del elemento de entrada creado por la función. Especificar «employee_stock_name» como parámetro (y por tanto, el atributo name del elemento de entrada), así que eso es lo que se envía a través del cable.

    Debe especificar el nombre correcto:

    @Html.TextBox("EmployeeName", Model.EmployeeName)

    o uso HtmlHelper.TextBoxFor para generar automáticamente:

    @Html.TextBoxFor(m => m.EmployeeName)
    • De nuevo, el renderizado de html necesita leer <input name=»employee_stock_name» tipo=»texto» />. He sido encontrar puestos donde el nombre de el renderizado de html campo es diferente del modelo de nombre de la propiedad, aunque. Así que yo no creo que esto sería un problema. Hay causa para esta funcionalidad existe. Lo que si desea que el nombre de su propiedad PersonId pero tiene la cadena de consulta de leer Id=? en su lugar?? Con esas limitaciones, yo debería ser capaz de hacer este trabajo. ¿Por qué TextBox existe, si el paso de un nombre personalizado atributo rompe modelo de enlace?
    • ¿Cómo estás esperando MVC a la mapa employee_stock_name a EmployeeName? ¿Y por qué estás esperando para ser «EmployeeName» si no «necesita» ser «employee_stock_name» para su webservice para leerlo? Editar: permítanme añadir esto: ¿Cuál es el nombre de la propiedad en StockEnrollmentModel que usted está esperando a ser llenado con el valor? También, es que el controlador/acción que se mostró también el servicio web que usted está mencionando? O que por alguna razón dos cosas diferentes?
    • Cuando he visto este tema en los resultados de mi búsqueda es cuando usted tiene modelos anidados y su unión a algo como: @Html.Cuadro De Texto(«MyPreferedName», Modelo.SearchParams.someParam) Si esto no es lo que se supone que esta es utilizada para que me ayude a entender por qué el código anterior (que fue encontrada aquí: stackoverflow.com/questions/6920935/…) es diferente a mi caso de uso? ¿Cómo MVC saber cómo se unen?
    • Comprobar mi edición en el comentario anterior, y el comentario que he añadido a la OP. Le falta algo a la discusión, tratando de averiguar qué es.
    • Nombre de la propiedad en StockEnrollmentModel es Nombre_empleado. Comprensiblemente, su no ser llenado cuando el formulario se envía al controlador con «stock_employee_name». El webservice que estoy publicando es un webservice externo, no se que URL. La acción del controlador que me han demostrado es la intercepción y de simular la respuesta del webservice van a dar. Sí puedo cambiar todas mis propiedades, para que coincida con los nombres, pero algunos de los nombres son bastante oscuro y difícil de entender. No es ideal
    • Así que, esencialmente, su pregunta es, realmente, «¿cómo puedo obtener el MVC sistema de enlace para enlazar un campo a una propiedad con un nombre diferente [para los fines de burla/fingiendo]» es que precisa?
    • Que es muy precisa

  2. 0

    Si usted realmente necesita tu html, para ser procesado como <input name="stock_employee_name" type="text" />, puede agregar el atributo siguiente a la propiedad en su modelo: [Bind(Prefix = "stock_employee_name")] – pero este es un hack y parece que son malentendidos un requisito en otro lugar? ¿Por qué el nombre de la entrada deben ser «employee_stock_name»?

    • Webservice voy a postear para que tenga los campos correspondientes que estoy tratando de llenar. Algunos de los nombres son bastante oscuro como para que estos campos, por lo que cambiar mi modelo de propiedades para reflejar todos los campos el servicio web está esperando no es lo ideal.
    • Lamento decir que suena como que trabajo duro sólo vas a tener que hacer – que probablemente se podría aliviar un poco el uso de un cuaderno de modelo personalizado que entiende subrayado caso, pero no por arte de magia resolver stock_employee_name a EmployeeName sin un útil codazo.
  3. 0

    Puede cambiar el nombre de un representado cuadro de texto de @Html.TextBoxFor, si se pasa el parámetro de Nombre de la htmlAttributes objeto de parámetro del método auxiliar.

    @Html.TextBoxFor(model => model.EmployeeName, new { Name = "stock_employee_name" })

    Esto va a romper su modelo de enlace cuando la publicación de regreso a su controlador, pero al menos su nombre será correcta en el formulario y los datos se llenan a la hora de crear el formulario inicialmente.

    Sin embargo, puede utilizar la Solicitud.Formulario[«stock_employee_name»] para recuperar los datos en el controlador post de la Acción.

Dejar respuesta

Please enter your comment!
Please enter your name here