Исходя из вашего предыдущего вопроса здесь и текущего кода представления в скрипте, очевидно, что вы используете Html.BeginForm()
неправильно. Вы на самом деле помещаете только кнопки внутри Html.BeginForm()
:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<button type="submit" class="btn btn-success btn-circle btn-xl" data-toggle="tooltip" title="Registar"> <i class="glyphicon glyphicon-floppy-disk"></i></button>
<button type="button" onclick="location.href='@Url.Action("Index", "Reservas")'" class="btn btn-primary btn-circle btn-xl" data-toggle="tooltip" title="Voltar"><i class="glyphicon glyphicon-arrow-left"></i></button>
}
Поскольку форма содержит только кнопки, любые другие пользовательские входные значения не передаются во время процедуры POST, а свойство DateTime
(то есть DataEntrada
), которому не присваивается значение, присваивается значение по умолчанию (DateTime.MinValue
), которое находится вне минимальное связанное значение типа даты SQL DATETIME
(обратите внимание, что эквивалент C # DateTime
равен DATETIME2
) и запуск SqlException
.
Что вам нужно сделать, это поместить Html.BeginForm()
сразу после директивы @model
, чтобы все элементы ввода формы помещались внутри формы и использовали строго типизированные HTML-помощники для всех элементов ввода, объявленных внутри класса viewmodel:
@model WebApplication.Models.BaseDados.ReservaVM
@using (Html.BeginForm("Create", "ControllerName", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="container-fluid">
<div class="container">
<div class="formBox">
<div class="row">
<div class="col-sm-12">
<h1>Registo de Reservas</h1>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="inputBox ">
<div class="inputText">Nome*</div>
@Html.DropDownListFor(model => model.ID_Cliente, null, new { @class = "input" })
</div>
</div>
<div class="col-sm-6">
<div class="inputBox">
<div class="inputText">Telemóvel</div>
@Html.TextBoxFor(model => model.Telemovel, new { @class = "input", id = "txtTelemovel" })
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="inputBox">
<div class="inputText">Cartão Cidadão</div>
@Html.TextBoxFor(model => model.CartaoCidadao, new { @class = "input", id = "txtCartaoCidadao" })
</div>
</div>
<div class="col-sm-6">
<div class="inputBox ">
<div class="inputText">ID Quarto</div>
@Html.DropDownListFor(model => model.ID_Quarto, null, new { @class = "input" })
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="inputBox">
<div class="inputText">Data Entrada*</div>
@Html.TextBoxFor(model => model.DataEntrada, new { @class = "input" })
</div>
</div>
<div class="col-sm-6">
<div class="inputBox">
<div class="inputText">Data Saída</div>
@Html.TextBoxFor(model => model.DataSaida, new { @class = "input" })
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="inputBox ">
<div class="inputText">Nº Pessoas*</div>
@Html.TextBoxFor(model => model.NumeroPessoas, new { @class = "input" })
</div>
</div>
<div class="col-sm-6">
<div class="inputBox">
<div class="inputText">Nº Noites</div>
@Html.TextBoxFor(model => model.NumeroNoites, new { @class = "input", id = "Noites" })
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="inputBox">
<div class="inputText">Preço</div>
@Html.TextBoxFor(model => model.Preco, new { @class = "input" })
<br /><br /><br />
<div>*Campos Obrigatórios</div>
</div>
</div>
<div class="col-sm-6">
<div class="inputBox">
<div class="inputText">Observações</div>
@Html.TextAreaFor(model => model.Observaçoes, new { @class = "input" })
</div>
</div>
</div>
<div class="col-md-12">
<center>
<button type="submit" class="btn btn-success btn-circle btn-xl" data-toggle="tooltip" title="Registar"> <i class="glyphicon glyphicon-floppy-disk"></i></button>
<button type="button" onclick="location.href='@Url.Action("Index", "Reservas")'" class="btn btn-primary btn-circle btn-xl" data-toggle="tooltip" title="Voltar"><i class="glyphicon glyphicon-arrow-left"></i></button>
</center>
</div>
</div>
</div>
</div>
}
Затем установите обязательные поля для свойств модели представления с помощью аннотаций данных (т. Е. RequiredAttribute
):
Модель
public class ReservaVM
{
public int ID_Reserva { get; set; }
[Required]
public int ID_Cliente { get; set; }
public int ID_Quarto { get; set; }
public string Telemovel { get; set; }
public string CartaoCidadao { get; set; }
[Required]
public Nullable<System.DateTime> DataEntrada { get; set; }
public Nullable<System.DateTime> DataSaida { get; set; }
[Required]
public int NumeroPessoas { get; set; }
public Nullable<int> NumeroNoites { get; set; }
public Nullable<decimal> Preço { get; set; }
public string Observaçoes { get; set; }
}
Контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ReservaVM reserva)
{
// do something
return View(reserva);
}
При использовании этой настройки привязка модели должна работать должным образом.