- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个电子商务应用程序,现在正在处理 ProductAttributes。我想处理尺寸、颜色和数量属性。
例子T 恤有多种颜色和尺寸,数量也不同。
Name - Color - Size - Qty
T-shirtA - Black - Small - 5pc
T-shirtA - Blue - Medium - 10pc
T-shirtA - Blue - Large - 4pc
我想处理上述情况。
表格
1. Product: Product_Id(pk), Name, Price, Description
2. ProductSizes: ProductSize_Id(pk), SizeName
3. ProductSizeValues: ProductSizeValue_Id(pk), ProductSize_Id(fk), Name
4. ProductColors: ProductColor_Id(pk), Name
5. ProductAttribues: ProductAttribute_Id(pk), ProductSize_Id(fk), ProductColor_Id(fk)
6. ProductAttribueValues: ProductAttributeValue_Id(pk), ProductAttribute_Id(fk), Product_Id(fk), ProductSizeValue_Id(fk), ProductColor_Id(fk), Quantity.
首先我对如何用数量存储颜色和尺寸感到困惑,然后我安装了 OpenCart 并看到了他们的 DB Schema 并且没有我上面的表格。
我已将一些值直接插入到数据库中,一切正常。得到想要的结果。但显然我希望我的用户使用 ViewPage 存储这些详细信息。
我创建了一个ViewModel
ProductAttributeViewModel.cs
public class ProductAttributesViewModel
{
public Product Product { get; set; }
public ProductAttribute ProductAttribute { get; set; }
public ProductAttributeValue ProductAttributeValue { get; set; }
public int ProductId { get; set; }
public string Name { get; set; }
[AllowHtml]
public string Description { get; set; }
public decimal? Price { get; set; }
public int? Quantity { get; set; }
public string Sizes { get; set; }
public int Stock { get; set; }
public int ProductColorVariantId { get; set; }
public int ProductSizeVariantId { get; set; }
public int ProductSizeVariantValueId { get; set; }
public int ProductAttributeId { get; set; }
public int ProductAttributeValueId { get; set; }
}
Contoller 我必须将数据插入到多个表中。所以他是我的 Controller
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddProduct(ProductAttributesViewModel newRecord)
{
IEnumerable<SelectListItem> productsizevariants = db.ProductSizeVariants.Select(c => new SelectListItem
{
Value = c.ProductSizeVariantId.ToString(),
Text = c.Name
});
ViewBag.ProductSizeVariantId = productsizevariants;
IEnumerable<SelectListItem> productsizevariantsvalues = db.ProductSizeVariantValues.Select(c => new SelectListItem
{
Value = c.ProductSizeVariantValueId.ToString(),
Text = c.Name
});
ViewBag.ProductSizeVariantValueId = productsizevariantsvalues;
IEnumerable<SelectListItem> productcolorvariantsid = db.ProductColorVariants.Select(c => new SelectListItem
{
Value = c.ProductColorVariantId.ToString(),
Text = c.Name
});
ViewBag.ProductColorVariantId = productcolorvariantsid;
var product = new Product
{
Name = newRecord.Name,
Description = newRecord.Description,
Price = newRecord.Price,
};
var productattributes = new ProductAttribute
{
ProductSizeVariantId = newRecord.ProductSizeVariantId,
ProductColorVariantId = newRecord.ProductColorVariantId,
ProductId = newRecord.ProductId
};
var productattributevalues = new ProductAttributeValue
{
ProductAttributeId = newRecord.ProductAttributeId,
ProductId = newRecord.ProductId,
ProductSizeVariantId = newRecord.ProductSizeVariantId,
ProductSizeVariantValueId = newRecord.ProductSizeVariantValueId,
ProductColorVariantId = newRecord.ProductColorVariantId,
Quantity = newRecord.Stock
};
db.Products.Add(product);
db.ProductAttributes.Add(productattributes);
db.ProductAttributeValues.Add(productattributevalues);
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
一切正常。数据存储在具有外键和所有值的所有表中。现在我想添加动态文本字段以添加尺寸和颜色。
我将颜色和尺寸存储在数据库中,并从 Controller 中将这些值传递到下拉列表中并填充它们。
查看
@model FypStore.ViewModels.ProductAttributesViewModel
@using (Html.BeginForm("AddProduct", "Store", FormMethod.Post, new { enctype = "multipart/form-data", @class = "form-horizontal col-md-12", role = "form" }))
{
<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">
<div class="row">
@*@Html.LabelFor(m => m.ProductSizeVariantId, new { @class = "col-md-2 control-label" })*@
<div class="col-md-2 control-label">
</div>
<div class="input_fields_wrap">
<button class="add_field_button">Add More Fields</button>
<div class="col-md-2">
@Html.DropDownList("ProductSizeVariantId", null, "Size", new { @class = "control-label" })
</div>
<div class="col-md-2">
@Html.DropDownList("ProductSizeVariantValueId", null, "Select Size", new { @class = "control-label" })
</div>
<div class="col-md-2">
@Html.DropDownList("ProductColorVariantId", null, "Select Color", new { @class = "control-label" })
</div>
<div class="col-md-2">
@Html.TextBoxFor(x => x.Stock, new { @placeholder = "Quantity", @class = "form-control" })
</div>
</div>
</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>
}
这是我想要实现的演示。
$('.multi-field-wrapper').each(function() {
var $wrapper = $('.multi-fields', this);
$(".add-field", $(this)).click(function(e) {
$('.multi-field:first-child', $wrapper).clone(true).appendTo($wrapper).find('input').placeholder('quantity').focus();
});
$('.multi-field .remove-field', $wrapper).click(function() {
if ($('.multi-field', $wrapper).length > 1)
$(this).parent('.multi-field').remove();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form role="form" action="/wohoo" method="POST">
<input type="text" placeholder="Name" name="name"><br />
<input type="text" placeholder="Price" name="price"><br />
<input type="text" placeholder="Description" name="description"><br />
<label>Attributes</label>
<div class="multi-field-wrapper">
<div class="multi-fields">
<div class="multi-field">
<select>
<option>Green</option>
<option>Blue</option>
<option>Black</option>
<option>Purple</option>
<option>White</option>
</select>
<select>
<option>XS</option>
<option>Small</option>
<option>Medium</option>
<option>Large</option>
<option>XL</option>
</select>
<input type="text" placeholder="quantity" name="quantity">
<button type="button" class="remove-field">Remove</button>
</div>
</div>
<button type="button" class="add-field">Add field</button>
</div>
<button type="button">Create Product</button>
</form>
最佳答案
如果我理解你更正,你的 View 模型中有一个属性列表。
所以如果你想使用它,你应该把它放在列表中。
所以你应该改变你的 View 模型:
//I put all properties of your list to separate model
public class AttriduteViewModel
{
public int ProductColorVariantId { get; set; }
public int ProductSizeVariantId { get; set; }
public int ProductSizeVariantValueId { get; set; }
public int ProductAttributeId { get; set; }
public int ProductAttributeValueId { get; set; }
public int? Quantity { get; set; }
}
public class ProductAttributesViewModel
{
public Product Product { get; set; }
public ProductAttribute ProductAttribute { get; set; }
public ProductAttributeValue ProductAttributeValue { get; set; }
public int ProductId { get; set; }
public string Name { get; set; }
[AllowHtml]
public string Description { get; set; }
public decimal? Price { get; set; }
public string Sizes { get; set; }
public int Stock { get; set; }
//note this line
public List<AttriduteViewModel> AdditionalAttridutes {get; set;}
}
基本上就这些了。现在您应该只为您的 AdditionalAttridutes
进行正确的绑定(bind)。使用 HtmlHelpers
(例如 Html.DropDownListFor
、Html.HiddenFor
和 Html.TextBoxFor
)会更容易实现。我只是在您的 View 中看不到它。
问题是,如果您使用助手创建您的 input
,它们将获得正确的 name
属性,并且您的模型将在 POST 上正确绑定(bind)。
您将面临的另一件事是像您的示例中那样动态创建新项目。您应该考虑正确的名称属性。我建议你检查this great answer关于那个问题。
关于c# - Asp.Net MVC - 在数据库中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894464/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!