Справочная информация:
Я подписываюсь на https://github.com/ajsaulsberry/BlipBinding, чтобы создать основную информацию mvc веб-сайт.
Описание проблемы :
При нажатии кнопки «Создать» изменения не сохраняются в базе данных, и строка return RedirectToAction («Index») под контроллером не выполняется. (Взгляните на Create ActionResult под контроллером, где я только RedirectToAction (), когда контекст успешно сохраняется в базе данных.)
Однако, если я закомментирую context.SaveChanges () под репо, тогда строка return RedirectToAction ("Index") снова начнет работать нормально.
The context.SaveChanges ( ) Строка кажется здесь виноватой, но я не знаю, почему она делает метод SaveCommercialInvoiceHeader () , возвращающий false вместо true.
Моя цель - сохранить ввод который я ввел в элементы управления CreateView в базе данных, а затем выполнил строку return RedirectToAction ("Index") , чтобы вернуться в представление индекса.
Я пробовал использовать прикрепление и отсоединение, но, похоже, тоже не работает.
Repo:
namespace CargoWarp.Models.Repositories
{
public class CommercialInvoiceRepository
{
public CommercialInvoiceHeaderCreateViewModel CreateCommercialInvoiceHeader()
{
var commercialInvoiceHeader = new CommercialInvoiceHeaderCreateViewModel()
{
CIH_PK = Guid.NewGuid().ToString()
};
return commercialInvoiceHeader;
}
public bool SaveCommercialInvoiceHeader(CommercialInvoiceHeaderCreateViewModel mod)
{
if (mod != null)
{
using (var context = new CustomsEntities())
{
if (Guid.TryParse(mod.CIH_PK, out Guid id))
{
var commercialInvoiceHeader = new CommercialInvoiceHeader()
{
CIH_PK = id,
CIH_Date = mod.CIH_Date,
CIH_Incoterm = mod.CIH_Incoterm,
CIH_Number = mod.CIH_Number,
CIH_AdditionalInformation = mod.CIH_AdditionalInformation,
CIH_MarksAndNumbers = mod.CIH_MarksAndNumbers
};
context.CommercialInvoiceHeaders.Add(commercialInvoiceHeader);
context.Entry(commercialInvoiceHeader).State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();
return true;
}
}
}
return false;
}
#endregion
}
}
Controller:
namespace CargoWarp.Controllers
{
public class CommercialInvoiceHeaderController : Controller
{
public ActionResult Index()
{
var repo = new CommercialInvoiceRepository();
var commercialInvoiceHeaderList = repo.GetCommercialInvoiceHeader();
return View(commercialInvoiceHeaderList);
}
public ActionResult Create()
{
var repo = new CommercialInvoiceRepository();
var commercialInvoiceHeader = repo.CreateCommercialInvoiceHeader();
return View(commercialInvoiceHeader);
}
[HttpPost]
public ActionResult Create([Bind(Include = "CIH_PK, CIH_Number, CIH_Date, CIH_Incoterm, CIH_MarksAndNumbers, CIH_AdditionalInformation")]CommercialInvoiceHeaderCreateViewModel commercialInvoiceHeaderCreateViewModel)
{
try
{
if (ModelState.IsValid)
{
var repo = new CommercialInvoiceRepository();
bool saved = repo.SaveCommercialInvoiceHeader(commercialInvoiceHeaderCreateViewModel);
if (saved)
{
return RedirectToAction("Index");
}
}
return View();
}
catch
{
return View();
}
}
}
}
ViewModelForCreateView:
namespace CargoWarp.ViewModels
{
public class CommercialInvoiceHeaderViewModel
{
public System.Guid CIH_PK { get; set; }
[DisplayName("Number")]
[Required]
public string CIH_Number { get; set; }
[DisplayName("Date")]
[Required]
public System.DateTime CIH_Date { get; set; }
[DisplayName("Incoterm")]
[Required]
public string CIH_Incoterm { get; set; }
[DisplayName("Marks & Numbers")]
public string CIH_MarksAndNumbers { get; set; }
[DisplayName("Additional Information")]
public string CIH_AdditionalInformation { get; set; }
}
}
Model:
namespace CargoWarp.Models
{
using System.Collections.Generic;
public partial class CommercialInvoiceHeader
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public CommercialInvoiceHeader()
{
this.CommercialInvoiceLines = new HashSet<CommercialInvoiceLine>();
}
public System.Guid CIH_PK { get; set; }
public string CIH_Number { get; set; }
public System.DateTime CIH_Date { get; set; }
public string CIH_Incoterm { get; set; }
public string CIH_MarksAndNumbers { get; set; }
public string CIH_AdditionalInformation { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<CommercialInvoiceLine> CommercialInvoiceLines { get; set; }
}
}
CreateView:
@model CargoWarp.ViewModels.CommercialInvoiceHeaderCreateViewModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>CommercialInvoiceHeader</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.CIH_Number, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CIH_PK, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CIH_PK, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CIH_Number, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CIH_Number, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CIH_Number, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CIH_Date, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CIH_Date, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CIH_Date, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CIH_Incoterm, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CIH_Incoterm, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CIH_Incoterm, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CIH_MarksAndNumbers, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CIH_MarksAndNumbers, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CIH_MarksAndNumbers, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CIH_AdditionalInformation, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CIH_AdditionalInformation, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CIH_AdditionalInformation, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}