我有很多麻烦。我认为 MVC 只是讨厌我。
第一个。我正在使用 Linq,模型是自动生成的。我刚刚使用 [Required] 标签/指令完成了我需要的属性。
第二。我有一个连接两个模型的“大模型”。就像这里解释的那样->视图中的多个模型
当我尝试使用具有空值等属性的模型回发视图时,ModelState.isvalid == false。我认为这很明显,因为我将 [Required] 设置为模型需要的一些属性。把我带到这里的东西来了。
第三。当我尝试使用 @Html.HiddenFor(...) 我的页面不会回发。如果我使用 3 HiddenFor,页面执行 PostBack,但如果我使用 10 HiddenFor,页面将静止不动。它哪儿也不去。
我已经尝试做我知识范围内的所有事情(非常有限,我对 MVC 真的很陌生)。
- 我试图将这些属性带到视图中并将它们显示出来,就好像它是“详细视图”一样。没有成功。
- 我试图设置@HiddenFor(model => model.Client)。在 Action 中作为 null 传递。
- 我尝试过使用这些大量的 HiddenFor。
- 我试图在隐藏(ClientID)中传递一个 ID 并从数据库中检索对象,但是一旦在操作中,ModelState 将不会“更新”其状态。
我为什么要这样做?我这样做是因为我需要页面在未填充框时显示“必填字段消息”,因此禁止页面在没有数据的情况下回发。我的数据库很好,这些字段是“非空”,所以,我可以从属性中删除 [Required],但我会丢失“必填字段消息”(除了 PostBack 那是我'我试图避免)。
如果有人有答案或答案或其他任何东西,请发布...我要射出我的头了xD
提前致谢...
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 Framework 的某些内容无法正确“映射”该数据类型?