Сохранение связанных данных в структуре сущности всегда было для меня проблемой, особенно когда у меня нет ниспадающего списка или чего-то еще, чтобы выбрать первичные данные первичной таблицы. Поэтому, чтобы дать вам более подробную информацию о том, что моя проблема, позвольте мне показать вам, что у меня есть в моем коде: У меня есть две модели, одна из которых называется Product, а вторая - Review. Класс Model продукта содержит все поля для продукта плюс навигационное свойство называется Review
, как показано ниже. Стоит упомянуть, что в таблице продуктов и отзывов есть один-много отношений, в которых у Продукта может быть много Обзоров.Как сохранить связанные данные с помощью сущности framework asp.net mvc5?
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public string ProductDescription { get; set; }
public decimal ProductPrice { get; set; }
public string ProductCategory { get; set; }
public Boolean ProductIsUnlimited { get; set; }
public Boolean ProductAvailable { get; set; }
public Boolean DiscountAvailable { get; set; }
public byte[] MainPicture { get; set; }
public string MainPictureMimeType { get; set; }
public byte[] SecondPicture { get; set; }
public string SecondPictureMimeType { get; set; }
public byte[] ThirdPicture { get; set; }
public string ThirdPictureMimeType { get; set; }
[HiddenInput(DisplayValue=false)]
public virtual ICollection<Review> Reviews { get; set; }
}
И модель обзора содержит все поля, необходимые для просмотра, как показано ниже.
public class Review
{
[HiddenInput(DisplayValue=false)]
public int ReviewId { get; set; }
[Required]
public int ProductID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Subject { get; set; }
[Required]
public string Body { get; set; }
}
У меня есть контроллер называется ProductController
и на этом контроллере я определил метод ViewResult
для извлечения продукта из базы данных, а затем все отзывы, которые связаны с этим продуктом, конечно, используя Review
свойство навигации, которая находится на модели продукта. Здесь метод ProductDetails
public ViewResult ProductDetails(int productId)
{
Product product = repository.Products
.Include(p => p.Reviews)
.FirstOrDefault(p => p.ProductID == productId);
return View(product);
}
Так что у меня есть вид на описанном выше способом, где отображать сведения о продукте и отзывы, обзоры, помещенных в частичном виде и я называемся в главном экране Детали изделия. Тогда у меня есть еще один частичный вид по имени _CreateReview, где форма находится в этом частичном с некоторым скриптом для создания нового обзора, как показано здесь.
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.ProductID)
@Html.EditorFor(m => m.Name)
@Html.EditorFor(m => m.Subject)
@Html.TextAreaFor(m => m.Body)
<input id="Submit" type="submit" value="Submit" />
}
<script>
var url = '@Url.Action("CreateReview", "Product")';
var reviews = $('#reviews');
var form = $('form');
$('#Submit').click(function() {
$.post(url, form.serialize(), function (response) {
if (response) {
reviews.append($('#col-sm-12').val()); // add the new Review to the existing reviews
form.get(0).reset(); // reset the form controls
}
}).fail(function (result) {
// oops
});
return false; // cancel the default submit
});
</script>
Как вы можете видеть выше сценария я отправляю данные в контроллер CreateReview
действия, чтобы сохранить обзор. Вот метод CreateReview JsonResult
.
[HttpPost]
public JsonResult CreateReview (Review review)
{
Review dbEntry = db.Reviews.Find(review.ReviewId);
if (dbEntry != null)
{
dbEntry.ProductID = review.ProductID;
dbEntry.Name = review.Name;
dbEntry.Subject = review.Subject;
dbEntry.Body = review.Body;
}
db.SaveChanges();
return Json(true);
}
Проблема начинается оттуда, все, кажется, работает просто отлично единственный кусок головоломки отсутствует, что я не мог понять, как получить ProductID этого продукта, который извлекается методом ProductDetails
просмотра и перейдите к моему CreateReview JsonResult
, чтобы создать новый обзор. Любая помощь была бы высоко оценена, спасибо заранее.
Слишком длинный вопрос, чтобы получить удостоверение личности, не так ли? Извините, ребята, я новичок в программировании.
Как вы звоните _CreateReview и какую модель вы передаете? Ваш код CreateReview выглядит неправильно, если вы пытаетесь СОЗДАТЬ обзор - должен быть db.Reviews.Add (обзор); там. –
Я передаю модель обзора, что с ней не так? –
просто посмотрите на URL ниже, и вы угадаете это. http: // localhost: 2158/Продукт/ProductDetails?ProductID = 191 –