使用@Html.隐藏在MVC3



我遇到了很多麻烦。我觉得MVC就是讨厌我。

1。我使用Linq,模型是自动生成的。我刚刚用[Required]标签/指令完成了我需要的属性。

2。我有一个连接两个模型的"大模型"。就像这里解释的那样->视图中的多个模型


当我尝试回发一个带有模型的视图,该模型具有像null这样的属性时,它具有ModelState。Isvalid == false。我认为这是显而易见的,因为我将[Required]设置为模型所需的一些属性。把我带到这里的东西来了。

3。当我试图使用@Html.HiddenFor(…)我的页面不会回发。如果我使用3 HiddenFor,页面就会进行PostBack,但如果我使用10 HiddenFor,页面就会保持不变。它不会去任何地方。

我已经尝试了在我的知识范围内做的一切(非常有限,我是MVC的新手)。

  • 我试着把这些属性带到视图中,并把它们显示出来,好像它是一个"详细视图"。没有成功。
  • 我试图设置@HiddenFor(model => model. client)。
  • 我试着用了这么多的HiddenFor。
  • 我试图在隐藏(ClientID)中传递一个ID,并从数据库中检索对象,但是ModelState将不会在动作内部"更新"其状态。

我为什么要这样做?我这样做是因为我需要页面在没有填充框时显示"Required Field Message",因此,禁止页面在没有数据的情况下回发。我的数据库很好,这些字段是"非空",所以,我可以从属性中删除[Required],但我会失去"Required字段消息"(除了PostBack这是我试图避免的事情)。

如果有人有答案或答案或任何东西,请张贴…我要把我的头射出去了xD

Thanks in advance…

PS:对不起我的英语…我知道它不好(甚至不正常)。


视图

@model PruebaMVC.Models.OperacionModel
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Operación de Venta</legend>
        @Html.HiddenFor(model => model.INMUEBLE)
        @*@Html.HiddenFor(model => model.INMUEBLE.Direccion)*@
        @*@Html.HiddenFor(model => model.INMUEBLE.Localidad)*@
        @*@Html.HiddenFor(model => model.INMUEBLE.Ciudad)*@
        @*@Html.HiddenFor(model => model.INMUEBLE.Caracteristicas)*@
        @*@Html.HiddenFor(model => model.INMUEBLE.PrecioVenta)*@
        @*@Html.HiddenFor(model => model.INMUEBLE.CLIENTE.IDCliente)*@
        <div class="editor-label">
            @Html.LabelFor(model => model.OPERACION.CLIENTE1.Nombre, "Nombre del Comprador")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.OPERACION.CLIENTE1.Nombre)
            @Html.ValidationMessageFor(model => model.OPERACION.CLIENTE1.Nombre)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.OPERACION.CLIENTE1.Apellido, "Apellido del Comprador")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.OPERACION.CLIENTE1.Apellido)
            @Html.ValidationMessageFor(model => model.OPERACION.CLIENTE1.Apellido)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.OPERACION.CLIENTE1.FechaNacimiento, "Fecha de Nacimiento del Comprador")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.OPERACION.CLIENTE1.FechaNacimiento)
            @Html.ValidationMessageFor(model => model.OPERACION.CLIENTE1.FechaNacimiento)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.OPERACION.CLIENTE1.DNI, "DNI del Comprador")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.OPERACION.CLIENTE1.DNI)
            @Html.ValidationMessageFor(model => model.OPERACION.CLIENTE1.DNI)
        </div>
        <div class="editor-label">
            @*@Html.LabelFor(model=>model.OPERACION.IDFormaPago, "Forma de Pago")*@
            <label for="ComboFP">Forma de Pago</label>
        </div>
        <div class="editor-field">
            <select id="ComboFP" name="SelectFP">
                @{
                    foreach (PruebaMVC.Models.DatosLINQ.FORMA_PAGO item in PruebaMVC.Models.DatosLINQ.OperacionDatos.ListarFormaPago())
                    {
                        <option value="@(item.IDFormaDePago)">@(item.TipoPago)</option>
                    }
                 }
            </select>
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.OPERACION.Comision, "Comisión de la Venta")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.OPERACION.Comision)
            @Html.ValidationMessageFor(model => model.OPERACION.Comision)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.OPERACION.Legajo, "Número de Legajo")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.OPERACION.Legajo)
            @Html.ValidationMessageFor(model => model.OPERACION.Legajo)
        </div>
        <p>
            <input type="submit" class="formbutton" value="Cargar Venta" />
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Volver al listado de Inmuebles", "Index")
</div>
控制器

//
        // GET: /Inmueble/Sale/5
        public ActionResult VentaP(int id)
        {
            OperacionModel unModeloOperacionCompuesto = new OperacionModel();
            unModeloOperacionCompuesto.INMUEBLE = InmuebleDatos.DetallesInmueble(id);
            return View(unModeloOperacionCompuesto);
        }
        //
        // POST: /Inmueble/Sale/5
        [HttpPost]
        public ActionResult VentaP(OperacionModel model, FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here
                model.INMUEBLE = InmuebleDatos.DetallesInmueble(model.INMUEBLE.IDInmueble);
                CLIENTE clienteComprador = new CLIENTE();
                clienteComprador.Nombre = model.OPERACION.CLIENTE1.Nombre;
                clienteComprador.Apellido = model.OPERACION.CLIENTE1.Apellido;
                clienteComprador.DNI = model.OPERACION.CLIENTE1.DNI;
                clienteComprador.FechaNacimiento = model.OPERACION.CLIENTE1.FechaNacimiento;
                OPERACION nuevaOperacion = new OPERACION();
                int unIDUsuario = UsuarioDatos.IDUsuario(User.Identity.Name);
                int unIDFormaPago = Convert.ToInt32(collection["SelectFP"]);
                decimal unaComision = model.OPERACION.Comision;
                int unLegajo = model.OPERACION.Legajo;
                if (ModelState.IsValid)
                {
                    nuevaOperacion.INMUEBLE = model.INMUEBLE;
                    nuevaOperacion.FechaOperacion = DateTime.Now;
                    nuevaOperacion.IDUsuario = unIDUsuario;
                    nuevaOperacion.IDFormaPago = unIDFormaPago;
                    nuevaOperacion.INMUEBLE.IDEstado = 2;
                    nuevaOperacion.Monto = model.INMUEBLE.PrecioVenta;
                    nuevaOperacion.Comision = unaComision;
                    nuevaOperacion.Legajo = unLegajo;
                    nuevaOperacion.CLIENTE1 = clienteComprador;
                    nuevaOperacion.CLIENTE = model.INMUEBLE.CLIENTE;
                    OperacionDatos.CrearVenta(nuevaOperacion);
                    return RedirectToAction("Index");
                }
                else
                {
                    //return View(nuevaOperacion);
                    return View(model);
                }
            }
            catch
            {
                return View(model);
            }
        }

编辑2:

我还在碰代码,当我注释

一行时
@Html.HiddenFor(model => model.INMUEBLE.PrecioVenta)

如果"PrecioVenta"是一个小数(18,2),那么页面将返回…它显然仍在获取一个ModelState。isValid == false,因为我留下了那个值

我能做什么?

"HiddenFor"的基本类型是什么?或者是。net框架的一些东西不能正确地"映射"该数据类型?

我认为问题在于客户端验证和小数。当你有一个十进制值时,它会在你的文化中显示为"35,0"…但是javascript验证器不能将","识别为十进制逗号。

这是我遇到的一个问题,但我在stackoverflow中找到了一个关于修改javascript验证器的帖子。

在这里你可以学习如何修复小数

的javascript验证器

相关内容

  • 没有找到相关文章