2016-01-14 106 views
1

我有作爲this questionAsp.Net店產品屬性(尺寸,數量)

我有一個產品表列

(PK)Product_Id, (FK)Category_Id, Name, Description, Size, Color, Quantity, Price, Condition 

現在我存儲這些同樣的問題通過簡單的形式與所有字段的值。

型號 Product.cs

public partial class Product 
{ 
    [Key] 
    public int ProductId { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string Name { get; set; } 

    [AllowHtml] 
    public string Description { get; set; } 

    public decimal? Price { get; set; } 

    public int? Quantity { get; set; } 

    public string Condition { get; set; } 

    [StringLength(50)] 
    public string Size { get; set; } 

    [StringLength(50)] 
    public string Colors { get; set; } 
} 

查看大小和顏色是由簡單的複選框存儲。

@using (Html.BeginForm("AddProduct", "Store", FormMethod.Post, new { enctype = "multipart/form-data", @class = "form-horizontal", role = "form" })) 
{ 
@Html.AntiForgeryToken() 
<h4>Create a new product.</h4> 
<hr /> 
@Html.ValidationSummary(true) 
<div class="form-group"> 
    @Html.LabelFor(m => m.Name, new { @class = "col-md-2 control-label", data_val_required = "required" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(m => m.Name, new { @class = "form-control" }) 
     @Html.ValidationMessageFor(m=>m.Name) 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.Description, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextAreaFor(m => m.Description, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.Size, new { @class = "col-md-2 control-label sizecheckboxshow" }) 
    <div id="sizecheckboxes" class="col-md-10"> 
     <input type="checkbox" name="Size" value="XS" /><span class="sizecheckboxtext">XS</span> 
     <input type="checkbox" name="Size" value="S" /><span class="sizecheckboxtext">S</span> 
     <input type="checkbox" name="Size" value="M" /><span class="sizecheckboxtext">M</span> 
     <input type="checkbox" name="Size" value="L" /><span class="sizecheckboxtext">L</span> 
     <input type="checkbox" name="Size" value="XL" /><span class="sizecheckboxtext">XL</span> 
     <input type="checkbox" name="Size" value="XXL" /><span class="sizecheckboxtext">XXL</span> 
    </div> 
</div> 

<div class="form-group"> 
    @Html.LabelFor(m => m.Colors, new { @class = "col-md-2 control-label colorcheckboxshow" }) 
    <div id="colorcheckboxes" class="col-md-10"> 
     <input type="checkbox" name="Color" value="Red" /><span class="colorcheckboxtext">Red</span> 
     <input type="checkbox" name="Color" value="Green" /><span class="colorcheckboxtext">Green</span> 
     <input type="checkbox" name="Color" value="Blue" /><span class="colorcheckboxtext">Blue</span> 
     <input type="checkbox" name="Color" value="Black" /><span class="colorcheckboxtext">Black</span> 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.Condition, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.RadioButtonFor(x => x.Condition, "New") <text>New</text> 
     @Html.RadioButtonFor(x => x.Condition, "Used") <text>Used</text> 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.Price, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(x => x.Price, new { @class = "form-control" }) 
    </div> 
</div> 

<div class="form-group"> 
    @Html.LabelFor(m => m.Quantity, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(x => x.Quantity, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    <div class="col-md-offset-2 col-md-10"> 
     <input type="submit" class="btn btn-default" value="Create Product" /> 
    </div> 
</div> 
} 

控制器

存儲所述產品使用此代碼

[HttpPost] 
public ActionResult AddProduct(Product newRecord) 
    { 
        newRecord.Name = Request.Form["Name"]; 
        newRecord.CategoryId = Convert.ToInt32(Request.Form["CategoryId"]); 
        newRecord.Size = Request.Form["Size"]; 
        newRecord.Colors = Request.Form["Color"]; 
        newRecord.Description = Request.Unvalidated.Form["Description"]; 
        newRecord.Price = Convert.ToDecimal(Request.Form["Price"]); 
        newRecord.Quantity = Convert.ToInt32(Request.Form["Quantity"]); 
        db.Products.Add(newRecord); 
        db.SaveChanges(); 
        return RedirectToAction("Index", "Home"); 
    } 

並且該值被存儲在1行。我如何用尺寸存儲尺寸?作爲引用的問題。

請檢查this鏈接以更好地瞭解此問題,當您在尺寸上移動鼠標時,它會顯示庫存中的左側物品。我想實現這一點。

+0

有一個模型?你在做什麼?你想在「尺寸」和「顏色」字段中存儲什麼(逗號分隔的值列表)? –

+0

爲什麼?你應該有一個產品的表格(ID,描述,價格等)和一個表格的大小和相關的庫存數量(不知道顏色適合於它) –

+0

我處於學習階段,但我得到以逗號分隔的結果,我知道必須有許多其他方式來存儲這些值。只需刪除顏色屬性,我如何存儲多個數量的尺寸?在問題結束時,請檢查該鏈接,並將鼠標移動到SIZES,它會顯示左邊的項目。我想做這個。 – user3223395667

回答

2

您的數據庫和模型設計對於您想要實現的目標不正確。您需要一個表格(例如Product),其中包含ID,名稱,說明和價格(假設價格不隨尺寸變化)等常見屬性,另一個表格(如`ProductStock)爲Size和StockQuantity用產品表中的FK)。你爲什麼要使用`的Request.Form [..]`得到的值時,你已經

你的車型會是這樣的

public class Product 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public decimal Price { get; set; } 
    public List<ProductStock> Stock { get; set; } 
} 
public class ProductStock 
{ 
    public int ID { get; set; } 
    public string Size { get; set; } // and enum may be better if the possible values wont change 
    public int Quantity { get; set; } 
} 

那麼你的看法是什麼樣

@model Product 
<h2>@Html.DisplayFor(m => m.Name</h2> 
@Html.DisplayFor(m => m.Description) 
@Html.DisplayFor(m => m.Description) 
@foreach(var item in Stock) 
{ 
    @Html.DisplayFor(m => item.Size) 
    @Html.DisplayFor(m => item.Quantity) 
} 
+0

感謝您的回答,但我如何使用控制器存儲?然後顯示在productDetails視圖頁面中。 – user3223395667

+0

這太多了添加到這個答案。對於創建/編輯產品,您可以使用答案中的技術[這裏](http://stackoverflow.com/questions/29161481/post-a-form-array-without-successful/29161796#29161796)和[這裏](http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308)動態添加大小/數量的行並保存產品及其在一種形式/控制器中的庫存收集。 –

+0

爲了顯示產品,我展示了一個簡化視圖(很明顯,您鏈接的網站正在生成帶有邊框等的''元素和'title'屬性以在工具提示中顯示可用數量)。我不知道如果你使用EF或其他存儲庫代碼,但控制器可能是'公衆ActionResult詳細信息(INT ID){產品模型= db.Products.Include(「股票」)。 p.ID == ID).FirstOrDefault();返回查看(模型); }保存產品按鈕上的' –