1

私はたくさんの問題を抱えています。MVCは私を嫌っていると思います。

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

2位。2つのモデルを結合する「ビッグモデル」があります。ここで説明されているように->ビュー内の複数のモデル


nullのようなプロパティを持つモデルでビューをポストバックしようとすると、ModelState.isvalid==falseになります。モデルが必要とするいくつかのプロパティに[必須]を設定したので、それは明らかだと思います。そして、ここに私をここに連れてきたものが来ます。

3位。@ Html.HiddenFor(...)を使用しようとすると、ページがポストバックされません。たとえば、3 HiddenForを使用すると、ページはPostBackを実行しますが、10 HiddenForを使用すると、ページは静止します。どこにも行きません。

私は自分の知識の範囲内ですべてをやろうとしました(非常に限られており、MVCは本当に新しいです)。

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

なぜ私はこれをしているのですか?これを行うのは、ボックスが入力されていないときに「必須フィールドメッセージ」を表示するページが必要であり、データなしでページをポストバックすることを禁止しているためです。私のデータベースは問題なく、これらのフィールドは「nullではない」ので、プロパティから[Required]を削除するだけで済みますが、「Required FieldMessage」(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」がdecimal(18,2)の場合、ページはポストバックします...その値を残しているため、明らかにModelState.isValid==falseを取得しています。

私に何ができる?

「HiddenFor」のプリミティブ型はどれが機能しますか?または、そのデータ型を適切に「マッピング」できない.Net Frameworkの一部がありますか?

4

1 に答える 1

1

問題はクライアント側の検証と小数だと思います。10進値がある場合、カルチャでは「35,0」としてレンダリングされます...しかし、JavaScriptバリデーターは「、」を小数点コマとして認識しません。

これは私が抱えている問題ですが、javascriptバリデーターの変更に関する投稿がstackoverflowにあります。

ここでは、小数のjavascriptバリデーターを修正する方法を学ぶことができます

于 2011-12-08T03:56:18.750 に答える