【发布时间】:2020-10-27 21:39:37
【问题描述】:
有没有办法从 HTTP Post 请求期间提交的表单中查找值,即使它们没有在视图模型上声明或作为操作方法的参数?当然是在 ASP.NET CORE MVC 上。
我会给你更多关于我正在尝试做的事情的背景信息。
我正在尝试将产品插入数据库。查看它的类和依赖项,然后查看产品视图模型,最后查看它。
小结:
-
每个产品都有很多子类别
-
每个子类别都有很多产品
-
因此 ProductSubcategory 类。
-
每个产品都有一个类别。
Product.cs
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public double Price { get; set; }
public Category Category { get; set; }
public IEnumerable<ProductSubCategory> SubCategories { get; set; }
}
ProductSubCategory.cs
public class ProductSubCategory
{
public int ProductId { get; set; }
public Product Product { get; set; }
public int SubCategoryId { get; set; }
public SubCategory SubCategory { get; set; }
}
SubCategory.cs
public class SubCategory
{
public int SubCategoryId { get; set; }
public string Name { get; set; }
public Category Category { get; set; }
public IEnumerable<ProductSubCategory> ProductSubCategories { get; set; }
}
Category.cs
public class Category
{
public int CategoryId { get; set; }
public string Name { get; set; }
public IEnumerable<Product> Products { get; set; }
}
ProductViewModel.cs
public class ProductViewModel
{
public int ProductId { get; set; }
public string Name { get; set; }
public double? Price { get; set; }
public SelectList Categories { get; set; }
public int? CategoryId { get; set; }
}
Insert.cshtml
- 要获得一个或多个 SubCategories,您必须先从选择中选择一个类别。
@model ProductViewModel
<form enctype="multipart/form-data" method="post" asp-controller="Product" asp-action="Add">
<div class="form-group">
<label asp-for="Name"></label>
<input type="text" class="form-control" asp-for="Name" placeholder="Cereal, Ice cream, Tuna, etc...">
</div>
<div class="form-group">
<label asp-for="Price"></label>
<input type="text" class="form-control" asp-for="Price" placeholder="5 , 23.5 , 50.231">
</div>
<div class="form-group">
<label asp-for="Categories"></label>
<select asp-for="CategoryId" asp-items="@Model.Categories" class="custom-select">
<option value="">Please select one</option>
</select>
</div>
<label>Subcategories</label>
@* Here we'll put the subcategories ( <input type="checkbox"/> ) according to the category selected,
each subcategory will be represented by a checkbox *@
<button class="btn btn-primary">Create</button>
</form>
好的,现在问题来了,我不知道如何映射/查找/搜索用户在视图上标记的子类别 (<input type="checkbox"/>),因为它们没有直接在视图和视图模型上声明。为什么?因为不可能,因为子类别的数量取决于用户选择的类别,所以如果他选择糖果类别,那么下面会显示焦糖、巧克力和软糖等子类别,如果他选择肉类类别,然后是猪肉、鸡肉和牛肉等子类别,以此类推……每个类别都由<input type="checkbox"/> 表示。
我必须知道选择了哪些,因为我必须在控制器上进行某种算法才能创建子类别实例并将它们分配给产品实例,这样我才能最终插入它。
【问题讨论】:
-
听起来你想要一个随着用户选择选项而改变的动态表单。您可以使用 JavaScript 和多个 AJAX 调用来获取子选项(参见此处以获取示例 stackoverflow.com/questions/18351921/…)。最终提交将需要所有相关的输入元素,或者您可以构建一个您将发布的 json 对象。
-
@Jasen 是的,它是一种动态形式,我知道如何使其动态化。这不是我要的。 Controller - Post Action Method 如何知道选择了哪些子类别?因为它可以是 4 或 5 或 6 ,谁知道呢。我需要确定,否则我无法创建子类别,然后插入 ProductSubCategory。
标签: c# asp.net-core asp.net-core-mvc