私は多くの問題を抱えています。 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のものがいくつかありますか?
あなたはあなたのコード、ビューとコントローラを投稿する必要があります...私たちはあなたを助けることができます。 – Romias
@Romias 私の投稿を編集してコードを追加しました。 クラスとプロパティの名前はスペイン語で書かれているので、理解できると思います。 – JuanC
こんな感じで解決できました... 私はhiddenForから "Price"を取り除きました。それは必要ではなかったので、ModelState.isValid == trueです。 私は、汚れた仕事をするために私の袖を試着して巻き上げるのが好きですが、なぜあなたは物事が起こっているのか分からないときはちょっと愚かです。 これについて私に与えることができる手掛かりは素晴らしいでしょう! – JuanC