我在Dropdownlist中绑定了类别和性别。我的模型有两个属性映射到其他表中的列:
[Required(ErrorMessage = "Choose your category")]
public string Category { get; set; }
[ForeignKey("Category")]
[NotMapped]
public virtual Category Category_Name { get; set; }
[Required(ErrorMessage = "Choose your category")]
public string Gender { get; set; }
[ForeignKey("Gender")]
[NotMapped]
public virtual Gender Gender_Name { get; set; }
我的ProductsController有一个名为“Create”的方法,用于上传
public ActionResult Create()
{
ViewBag.Category = new SelectList(
db.Categories.ToList(),
"Category_ID",
"Category_Name")
;
ViewBag.Gender = new SelectList(
db.Genders.ToList(),
"Gender_ID",
"Gender_Name"
);
return View();
}
//
// POST: /Products/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Products products)
{
if (products.Image.ContentLength > (2 * 1024 * 1024))
{
ModelState.AddModelError("CustomError", "The Size of the
Image is 2MB");
return View();
}
if (!(products.Image.ContentType == "image/jpeg" ||
products.Image.ContentType == "image/gif"))
{
ModelState.AddModelError("CustomError", "File type allowed :
jpeg and gif");
return View();
}
byte[] data = new byte[products.Image.ContentLength];
products.Image.InputStream.Read(data, 0,
products.Image.ContentLength);
products.Product_Photo = data;
db.Products.Add(products);
db.SaveChanges();
return View(products);
}
对应的观点是:
@model eKart.Models.Products
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm("Create", "Products", FormMethod.Post, new { enctype
= "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Products</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Product_Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Product_Name)
@Html.ValidationMessageFor(model => model.Product_Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Product_Quantity)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Product_Quantity)
@Html.ValidationMessageFor(model => model.Product_Quantity)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Product_Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Product_Price)
@Html.ValidationMessageFor(model => model.Product_Price)
</div>
<div>
@Html.LabelFor(model=>model.Product_Photo)
</div>
<div>
@Html.TextBoxFor(model=> model.Image, new{type="file"})
@Html.ValidationMessage("CustomError")
</div>
<div class ="editor-label">
@Html.LabelFor(model => model.Category)
</div>
<div class="editor-field">
@Html.DropDownList("Category",
(SelectList)ViewBag.Category,"Choose Category")
@Html.ValidationMessageFor(model=>model.Category)
</div>
<div class ="editor-label">
@Html.LabelFor(model=>model.Gender)
</div>
<div class ="editor-field">
@Html.DropDownList("Gender",(SelectList)ViewBag.Gender,"Choose
Gender")
@Html.ValidationMessageFor(model=>model.Gender)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
当我提交表单时,我点击了上面提到的“类别”中的错误。我检查了StackOverFlow但没有找到有用的信息。我真的想知道发生了什么以及我做错了什么。谢谢提前你的帮助
答案 0 :(得分:2)
在班级中添加新媒体资源:
型号:
[Required(ErrorMessage = "Choose your category")]
public string Category { get; set; }
public List<System.Web.Mvc.SelectListItem> CategoryList { get; set; }
控制器:
public ActionResult Create()
{
var model = new Products();
model.CategoryList = db.Categories.Select(x => new SelectListItem
{
Text = x.CategoryName,
Value = x.CategoryName
}).ToList();
return View(model);
}
编辑:正如StephenMuecke在评论中所说,当CategoryList
无效时,您需要将值重新分配给ModelState
媒体资源。
[HttpPost]
public ActionResult Create(Product product)
{
if(ModelState.IsValid)
{
// Code here
}
product.CategoryList = db.Categories.Select(x => new SelectListItem
{
Text = x.CategoryName,
Value = x.CategoryName
}).ToList();
return View(product);
}
查看:
<div class ="editor-label">
@Html.LabelFor(model => model.Category)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Category, Model.CategoryList, "Choose category")
@Html.ValidationMessageFor(model=>model.Category)
</div>
在性别&#39;
中执行相同的操作