我有很多麻煩。 我認爲MVC只是討厭我。在MVC3中使用@ Html.HiddenFor
1st。我正在使用Linq,並且模型是自動生成的。我用[必需的]標記/指令完成了我需要的屬性。
2nd。我有一個連接兩個模型的「大模型」。 像這裏說明 - >Multiple models in a view
當我試圖回傳與具有類似零點這些屬性模型的觀點,是有ModelState.isvalid ==假。我認爲這很明顯,因爲我將[必需]設置爲模型所需的一些屬性。 這裏來的東西,把我帶到這裏。
3rd。當我試圖使用@ Html.HiddenFor(...)我的頁面不會回發。 如果我使用,比方說,3 HiddenFor,頁面是PostBack,但是如果我使用10 HiddenFor,頁面就會靜止不動。它不會去任何地方。我試過去做所有在我知識範圍內的東西(非常有限,我真的是新的MVC)。
- 我試圖將這些屬性帶到視圖中,並顯示它們,就好像它是「細節視圖」。沒有成功。
- 我試着設置@HiddenFor(model => model.Client)。在Action中傳遞爲null。
- 我試過使用這些HiddenFor噸。
- 我試過只在隱藏(ClientID)中傳遞一個ID並從數據庫中檢索對象,但ModelState在動作中不會「更新」它的狀態。
我爲什麼這樣做呢? 我這樣做是因爲我需要頁面在未填充框時顯示「必填字段消息」,因此,禁止在沒有數據的情況下回發頁面。 我的數據庫很好,而且這些字段都是「Not null」,所以我可以從屬性中刪除[Required],但是我會丟失「Required Field Message」(除了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框架的某些東西不能正確映射數據類型?
你應該發佈你的代碼,視圖和控制器......所以我們可以幫助你。 – Romias
@Romias 我編輯了我的文章並添加了代碼。 我希望你能理解它,因爲類和屬性的名稱是用西班牙文寫的。 – JuanC
有點像可以解決它... 我只是從hiddenFor拿走了「價格」,這是不需要的,所以ModelState.isValid == true。 我喜歡這種嘗試和捲起袖子去完成骯髒工作的事情,但是當你不知道事情發生的原因時,你會覺得有點愚蠢。 任何線索,你可以給我關於這將是偉大的! – JuanC