C# 如何使用实体框架asp.net mvc5保存相关数据?
在实体框架中保存相关数据对我来说一直是一个挑战,特别是当我没有下拉列表或其他东西来选择主表的主键数据时。为了让您更详细地了解我的问题所在,让我向您展示我的代码中包含的内容: 我有两个模型,一个称为Product,第二个称为Review,Product model类包含产品的所有字段以及名为C# 如何使用实体框架asp.net mvc5保存相关数据?,c#,json,asp.net-mvc,entity-framework,razor,C#,Json,Asp.net Mvc,Entity Framework,Razor,在实体框架中保存相关数据对我来说一直是一个挑战,特别是当我没有下拉列表或其他东西来选择主表的主键数据时。为了让您更详细地了解我的问题所在,让我向您展示我的代码中包含的内容: 我有两个模型,一个称为Product,第二个称为Review,Product model类包含产品的所有字段以及名为Review的导航属性,如下所示。值得一提的是,在Product and Reviews表上设置了一对多关系,其中一个产品可以有多个评论 public class Product {
Review
的导航属性,如下所示。值得一提的是,在Product and Reviews表上设置了一对多关系,其中一个产品可以有多个评论
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; }
}
我有一个名为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);
}
所以我有一个上面方法的视图,其中显示产品详细信息和评论,评论放在部分视图中,我调用了ProductDetails主视图。然后,我有一个名为_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>
问题就从这里开始,一切似乎都很好。唯一一个难题是,我不知道如何获取由ProductDetails
view方法获取的该产品的ProductID,并将其传递给我的CreateReview JsonResult
以创建新的评论。任何帮助都将不胜感激,提前谢谢
问题太长了,只是为了弄个身份证,不是吗?抱歉,伙计们,我是编程新手。进行此设置的一种方法是,您可以让您的
CreateReview
方法也使用productID
@Url.Action("CreateReview", "Product", new { productID = model.ProductID } )
以及您的CreateReview
方法:
public JsonResult CreateReview (Review review, int productID){
...
}
将调用更改为局部视图:
@Html.Partial("_CreateReview", new Review { ProductId = @model.ProductId } )
更改您的创建例程:
[HttpPost]
public JsonResult CreateReview (Review review)
{
if (ModelState.IsValid)
{
db.Reviews.Add(review);
db.SaveChanges();
return Json(true);
}
return Json(false);
}
你能解释一下什么是productID和model.productID吗?你有没有注意到我在CreateReview部分中使用了review模型?猜猜看productID是什么?我用了它们,就像你用的一样。视图中的模型包含一个
ProductID
,当您将Review
对象发布到CreateReview
方法时,需要该ID。我建议您将该模型参数作为第二个参数带到CreateReview
方法中productID
是第二个参数,可以是任何东西,它只是一个占位符。您如何调用_CreateReview?您传递的是什么模型?如果您试图创建审阅,您的CreateReview代码看起来不正确-应该是db.Reviews.Add(审阅);在那里。我通过了审查模型,它有什么问题吗?只要看看下面的url,你就会猜出来@SteveGreene那么你对这个案子有什么建议?我被卡住了!是,我想创建一个评论
@Html.Partial("_CreateReview", new Review { ProductId = @model.ProductId } )
[HttpPost]
public JsonResult CreateReview (Review review)
{
if (ModelState.IsValid)
{
db.Reviews.Add(review);
db.SaveChanges();
return Json(true);
}
return Json(false);
}