2015-10-10 79 views
0

我有兩個表Product & Orders,我所做的是什麼,我創建View和和經過Ordered ProductsOrder對象硬編碼的HTML表單。 同時節省了Orders我收到錯誤INSERT statement conflicted with the FOREIGN KEY constraint 我已經添加了斷點,以及,所有的值被正確地填寫訂單對象,但Id & Products屬性爲null。插入數據與硬編碼的形式對象在ASP.Net MVC

我創建了一對多關係,如下圖所示。 Relationship one to many between orders and products

這是我的看法

@model Myapp.Areas.Admin.ViewModel.ProductDisplayViewModel 
@ViewBag.Message  
    @using (Html.BeginForm("OrderProduct", "Order")) 
     { 
      @Html.AntiForgeryToken() 
      @Html.ValidationSummary(true) 

     <div class="form-group"> 
      <label>Your Name</label>   
      <input id="Name" name="Name" class="form-control" type="text"/> 
     </div> 

      <div class="form-group"> 
     <label>Your Email</label> 
     @Html.TextBox("Email", null, new { @class = "form-control" }) 
    </div> 
    <div class="form-group"> 
     <label>Your Contact Number</label> 
     @Html.TextBox("ContactNumber", null, new { @class = "form-control" }) 
    </div> 
    <div class="form-group"> 
     <label>Your Address</label> 
     @Html.TextBox("Address", null, new { @class = "form-control" }) 
    </div> 
    <div class="form-group"> 
     <label>Quantity</label> 
     @Html.TextBox("Quantity", null, new { @class = "form-control",type="Number" }) 
    </div> 
    <div class="form-group"> 
     <label>Any Comments</label> 
     @Html.TextBox("Comments", null, new { @class = "form-control" }) 
    </div> 
    <div class="form-group"> 
    @Html.Hidden("ProductId", Model.ProductId) 
    </div> 
    <div class="form-group">   
     <input id="Submit1" type="submit" value="Order Now" class="read-more"/>   
     <a href="@Url.Action("Index")" class="read-more">Back to Products</a> 

    </div> 
     } 

這是訂單控制我的行動方法

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult OrderProduct(Orders order) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Orders.Add(order); 
     db.SaveChanges(); 
     // if Order Saved in DB show success Message and Redirect on the same product page 
     ViewBag.Message = "Value Entered in DB"; 
     return RedirectToAction("Details", "Product", new { id = order.ProductId }); 
    } 
    // if something went wrong Redirect on the same product page 
    return RedirectToAction("Details", "Product", new { id = order.ProductId }); 
} 
+0

它有點難以理解問題是什麼。您的視圖不包含'Id'的輸入,因此它始終爲'0'(假設它的類型爲「int」)。但是你正在爲'ProductId'創建一個輸入,所以假設你已經在GET方法中爲它設置了一個值,你將在POST方法中得到它。但是爲什麼你要手動創建html,比如''而不是'@ Html.TextBoxFor(m => m。名稱,新{@class =「form-control」})'並創建不是標籤的元素(它應該是@ Html.LabelFor(m => m.Name)' –

+0

然後爲什麼要重定向如果'ModelState'無效? - 它應該是'返回視圖(order);' –

+0

@StephenMuecke基本上我發佈了視圖的一部分,我的視圖實際上做的是它包含一個Product的模型,我正在渲染一個HTML表單來訂購該產品,並且我再次重定向到該頁面,因爲我想顯示一個錯誤或成功消息。而且我的表單確實有一個隱藏的ProductId字段,它從POST請求和其餘的數據 –

回答

1

產品編號應該是編號從產品表,由你定義去但是你傳遞的Model.ProductId會導致你的問題。

使用Product.Id從您添加訂單的產品填充要返回的模型的ProductId字段。

newOrderObject.ProductId = Product.Id 
return View(newOrderObject); 
相關問題