У меня много проблем.
Я думаю, что MVC просто ненавидит меня.
первый. Я использую Linq, и модель генерируется автоматически. Я только что добавил нужные мне свойства с помощью тега / директивы [Required].
второй. У меня есть «Большая модель», которая объединяет две модели.
Как объясняется здесь -> Несколько моделей в представлении
Когда я пытаюсь отправить обратно представление с моделью, имеющей такие свойства, как нули, is ModelState.isvalid == false. Я думаю, это очевидно, потому что я установил [Обязательный] для некоторых свойств, которые нужны модели.
И вот приходит то, что привело меня сюда.
третий. Когда я пытаюсь использовать @ Html.HiddenFor (...), моя страница не отправляется обратно.
Если я использую, скажем, 3 HiddenFor, страница выполняет PostBack, но если я использую 10 HiddenFor, страница просто остановится. Это никуда не денется.
Я пытался сделать все, что в моих пределах знаний (очень ограниченно, я действительно новичок в MVC).
- Я пытался отобразить эти свойства и отобразить их, как если бы это был «Подробный вид». Не удалось.
- Я пытался установить @HiddenFor (model => model.Client). В действии передается как ноль.
- Я пытался использовать эти тонны HiddenFor.
- Я пытался передать только идентификатор в скрытый (ClientID) и извлечь объект из базы данных, но ModelState не будет «обновлять» свой статус один раз внутри действия.
Почему я это делаю?
Я делаю это, потому что мне нужно, чтобы на страницах отображалось «Обязательное поле сообщения», когда поле не заполнено, следовательно, запрещается отправка страницы без данных.
Моя база данных в порядке, и эти поля имеют значение «Не ноль», поэтому я могу просто удалить [Обязательный] из свойств, но я потеряю «Обязательное поле сообщения» (в дополнение к PostBack, который я пытаюсь избежать).
Если у кого-то есть ответ или ответ, или что-то еще, пожалуйста, опубликуйте его ... Я собираюсь высечь голову xD
Заранее спасибо ...
PS: Извините за мой английский ... Я знаю, что это не хорошо (или даже регулярно).
View
@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 Framework, который не может "отобразить" этот тип данных должным образом?