1

私は多くの問題を抱えています。 MVCが私を嫌うと思う。MVC3で@ Html.HiddenForを使用

1st。私はLinqを使用しており、モデルは自動的に生成されます。私は[Required]タグ/ディレクティブで必要なプロパティを完了しました。

第2位。私は2つのモデルを結合する "ビッグモデル"を持っています。 などがここで説明される - >


私はヌルのように、これらの性質を有するモデルとビューをポストバックしようMultiple models in a view、== falseをModelState.isvalidたです。私はモデルが必要とするいくつかのプロパティに[必須]を設定しているので、それは明らかです。 ここに私を連れてきたものが来る。

3rd。 @ Html.HiddenFor(...)を使用しようとすると、私のページはポストバックされません。 私が使っているのは、3 HiddenForと言うと、そのページはPostBackですが、10 HiddenForを使うと、そのページはただ静止しているだけです。それはどこにも行きません。

私は自分の知識の範囲内にあるすべてのことを試みました(非常に限られた、私はMVCで本当に新しいです)。

  • 私は、これらのプロパティを表示して、それらが「詳細ビュー」であるかのように表示しようとしました。成功しなかった。
  • @HiddenFor(model => model.Client)を設定しようとしました。アクションでは、nullとして渡されます。
  • 私はこれらのHiddenForトンを使用しようとしました。
  • 私は隠し(ClientID)にIDだけを渡してデータベースからオブジェクトを取得しようとしましたが、ModelStateはアクション内でそのステータスを「更新」しません。

なぜ私はこれをやっていますか? これは、ボックスが塗りつぶされていないときに「必須フィールドメッセージ」を表示するためにページが必要なため、データなしでポストバックするようページを禁止しているためです。 私のデータベースは問題なく、これらのフィールドは "nullではない"ので、プロパティから[必須]を削除できますが、 "必須フィールドメッセージ"(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:

私はまだコードに触れるいる、と私は

の行をコメントするとき「PrecioVentaは」小数(18,2)である
@Html.HiddenFor(model => model.INMUEBLE.PrecioVenta) 

は、ページには、私はその値を出たんだので、それは明らかにまだ== falseのModelState.isValidを取得している...ポストバックありません。

どうすればよいですか?

「HiddenFor」のプリミティブ型はどちらが機能しますか? または、そのデータ型を適切に「マップ」できない.NET Frameworkのものがいくつかありますか?

+0

あなたはあなたのコード、ビューとコントローラを投稿する必要があります...私たちはあなたを助けることができます。 – Romias

+0

@Romias 私の投稿を編集してコードを追加しました。 クラスとプロパティの名前はスペイン語で書かれているので、理解できると思います。 – JuanC

+0

こんな感じで解決できました... 私はhiddenForから "Price"を取り除きました。それは必要ではなかったので、ModelState.isValid == trueです。 私は、汚れた仕事をするために私の袖を試着して巻き上げるのが好きですが、なぜあなたは物事が起こっているのか分からないときはちょっと愚かです。 これについて私に与えることができる手掛かりは素晴らしいでしょう! – JuanC

答えて

1

私は問題がクライアント側の検証と小数点であると思います。 小数点以下の値を持つと、カルチャで "35,0"と表示されますが、javascriptバリデーターは小数点の昏睡として "、"を認識しません。

これは私が抱えている問題ですが、ここで私はjavascriptバリデータを変更することについてのstackoverflowの投稿を見つけました。

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

+0

さて、あなたはそれを釘付けにしたと思います。 Yeap、クライアント側の検証で "コンマ"と "ドット"に問題があります。 リンク(これは日曜日だった)が言うように私はスクリプトを修正しようとしましたが、目立たない検証では失敗し続けました。私はそのようにして、将来それを修正することにしました。今これは優先事項ではありません。 – JuanC

+0

ああ、私はまた、Webの設定を変更し、 "文化"と "uiCulture"をautoに設定しました。 成功しませんでした。 – JuanC

関連する問題