1

我有很多麻煩。 我認爲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框架的某些東西不能正確映射數據類型?

+0

你應該發佈你的代碼,視圖和控制器......所以我們可以幫助你。 – Romias

+0

@Romias 我編輯了我的文章並添加了代碼。 我希望你能理解它,因爲類和屬性的名稱是用西班牙文寫的。 – JuanC

+0

有點像可以解決它... 我只是從hiddenFor拿走了「價格」,這是不需要的,所以ModelState.isValid == true。 我喜歡這種嘗試和捲起袖子去完成骯髒工作的事情,但是當你不知道事情發生的原因時,你會覺得有點愚蠢。 任何線索,你可以給我關於這將是偉大的! – JuanC

回答

1

我認爲問題是客戶端驗證和小數。 當你有一個十進制值時,它在你的文化中將其渲染爲「35,0」...但javascript驗證器不會將「,」識別爲十進制昏迷。

這是我遇到的一個問題,但我在這裏找到了關於修改javascript驗證器的一個帖子。

Here you can learn how to fix the javascript validator for decimals

+0

好吧,我認爲你釘了它。 Yeap,我在客戶端驗證中遇到了「逗號」和「點」的麻煩。 我試圖糾正腳本鏈接說(這是星期日),它仍然保持在不顯眼的驗證失敗。我決定讓它這樣並在將來修復它。現在,這不是一個優先事項。 – JuanC

+0

哦,我也修改了網頁配置,並將「Culture」和「uiCulture」設置爲auto。 也沒有成功。 – JuanC