Посмотрите на определение вашей модели
// This means this value is required
// and should not be greater than 255 characters
[Required]
[StringLength(255)]
public string PetName { get; set; }
// This means this value is required
// and should not be greater than 6 characters
[Required]
[StringLength(6)]
public string PetGender { get; set; }
Так что либо вы не отправляете значение из своего клиентского приложения, либо оно превышает указанные вами ограничения.Измените метод действия на этот, чтобы проверить свою модель в бэкэнде (никогда не доверяйте вводу клиента)
[HttpPost]
public ActionResult Save(PetRescued petRescued)
{
if (ModelState.IsValid) // Check for errors
{
if (petRescued.Id == 0)
_context.PetRescueds.Add(petRescued);
else
{
var petRescuedInDb = _context.PetRescueds.Single(c => c.Id == petRescued.Id);
petRescuedInDb.PetName = petRescued.PetName;
petRescuedInDb.PetAge = petRescued.PetAge;
petRescuedInDb.PetGender = petRescued.PetGender;
petRescuedInDb.PetWeightInKg = petRescued.PetWeightInKg;
petRescuedInDb.PetSpeciesId = petRescued.PetSpeciesId; //strange
petRescuedInDb.DateWhenRescued = petRescued.DateWhenRescued;
}
_context.SaveChanges();
return RedirectToAction("Index", "PetRescued");
}
else
return View(petRescued); // Return the same view with the original data
// or with the correct model of your view, at least
}
ОБНОВЛЕНИЕ
Исправьте модель представления так, чтобы она отражала ваши правильные данные.Это означает, что вы отправляете правильную модель на сервер.В ASP.Net MVC есть нечто, называемое привязка модели , которое представляет собой механизм, используемый для преобразования данных, полученных от клиента, в вашу модель C #.По умолчанию он работает путем определения имени значений, переданных клиентом, и определения точного сопоставления со свойствами модели.Это означает, что, по вашему мнению, вы объявляете это
@Html.TextBoxFor(m => m.PetRescueds.PetName, new { @class = "form-control" })
Итак, если вы проверяете данные, отправленные браузером, вы увидите, что данные формы включают в себя что-то вроде
PetRescueds.PetAge: whatever_the_client_typed
не будет сопоставляться с вашей моделью, так как ваша модель не имеет свойства с именем PetRescueds с подпунктом PetName, ваша модель действия напрямую является моделью PetRescued.Поэтому либо измените свое представление, указав непосредственно имя attr, например,
@Html.TextBox("PetName", Model.PetRescueds.PetName, new { @class = "form-control" })
, либо измените модель действия, чтобы она соответствовала определению модели представления.В любом случае, ваша модель представления должна быть последовательной в ваших действиях и представлении.В противном случае вы в конечном итоге получите нулевые значения в вашей модели действия, несмотря на то, что они правильно заполнены в вашем представлении или отображаются пустые значения в ваших представлениях независимо от того, что вы фактически создали в действии контроллера.
Итак, в основномпроверьте определения вашей модели.Убедитесь, что вы используете правильное определение модели для отображения в ваших представлениях.Убедитесь, что ваше представление правильно определено относительно того, что вы ожидаете получить в своем бэкэнд-контроллере.
Затем измените свое представление, включив в него ошибки проверки, полученные с сервера.
@using (Html.BeginForm("Save", "PetRescued"))
{
<!-- This will show your errors-->
@Html.ValidationSummary()
<div class="form-group">
@Html.LabelFor(m => m.PetRescueds.PetName)
<!-- Or you can show errors for each model property -->
<!-- like this -->
@Html.ValidationMessageFor(m => m.PetRescueds.PetName);
@Html.TextBox("PetName", Model.PetRescueds.PetName, new { @class = "form-control" })
</div>
//strange
<div class="form-group">
@Html.LabelFor(m => m.PetSpecies)
@Html.DropDownListFor(m => m.PetRescueds.PetSpeciesId, new SelectList(Model.PetSpecies, "Id", "SpeciesName"), "Select A Species", new {@class = "form-control"})
</div>
<div class="form-group">
@Html.LabelFor(m => m.PetRescueds.PetAge)
@Html.TextBoxFor(m => m.PetRescueds.PetAge, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.PetRescueds.PetGender)
@Html.TextBoxFor(m => m.PetRescueds.PetGender, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.PetRescueds.PetWeightInKg)
@Html.TextBoxFor(m => m.PetRescueds.PetWeightInKg, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.PetRescueds.DateWhenRescued)
@Html.TextBoxFor(m => m.PetRescueds.DateWhenRescued, "{0:d MMM yyyy}", new { @class = "form-control" })
</div>
@Html.HiddenFor(m => m.PetRescueds.Id)
<button type="submit" class="btn btn-primary">Save</button>
}
Подробнее о проверке данных можно прочитать в Microsoft
.