这个问题的可能原因和解决方案是什么?为什么不工作我在这里待了差不多一个小时不知道是什么问题。
查看
@model Sanipex.Models.WarehouseGoodsIN
@using (Html.BeginForm())
{
<div align="center">
@Html.TextBoxFor(model => model.missinglabel)
@Html.ValidationMessageFor(model => model.missinglabel)
</div>
<input type="submit" name="btnsubmit" value="Confirm"/>
}
MODEL
public class WarehouseGoodsIN
{
[Key]
public int Id { get; set; }
[Required]
public int missinglabel { get; set; }
}
CONTROLLER
public ActionResult ScanLabel(WarehouseGoodsIN goodsin, string btnsubmit)
{
if (btnsubmit == "Confirm")
{
if (ModelState.IsValid) //modelstate value is false
{
db.WarehouseGoodsINs.Add(goodsin);
db.SaveChanges();
}
return RedirectToAction("ScanLabelMenu");
}
}
答案 0 :(得分:0)
首先,您的视图中缺少submit
按钮可能会出现问题。因此,您的代码应如下所示:
@model Sanipex.Models.WarehouseGoodsIN
@using (Html.BeginForm())
{
<div align="center">
@Html.TextBoxFor(model => model.missinglabel)
@Html.ValidationMessageFor(model => model.missinglabel)
<input type="submit" value="Send"/>
</div>
}
此外,您应该考虑使用服务器端验证。例如:
[HttpPost]
public ActionResult YourAction(WarehouseGoodsIN model)
{
if (ModelState.IsValid)
{
//some logic here
}
else
{
return View(model);
}
}
答案 1 :(得分:0)
如果modelState无效,则应将模型再次传递给view,因为验证元数据存储在模型中。
[HttpPost]
public ActionResult ScanLabel(WarehouseGoodsIN goodsin, string btnsubmit)
{
if (btnsubmit == "Confirm")
{
if (ModelState.IsValid) //modelstate value is false
{
db.WarehouseGoodsINs.Add(goodsin);
db.SaveChanges();
return RedirectToAction("ScanLabelMenu");
}
else
{
// this line is necessary for model validation
return View(goodsin);
}
}
}
此外,您无需检查是否单击了提交按钮。
<强>更新强>
在if (ModelState.IsValid)
使用此行ModelState.Remove("Id")
删除Id索引之前,当MVC团队删除此错误时,您只需删除项目的此行代码。
使用MVC 5,数据库优先和实体框架6时仍然存在此问题。但仅在使用ViewModels时才有。
查看强>
@model Sanipex.Models.WarehouseGoodsIN
@using (Html.BeginForm())
{
<div align="center">
@Html.TextBoxFor(model => model.missinglabel)
@Html.ValidationMessageFor(model => model.missinglabel)
</div>
<input type="submit" name="btnsubmit" value="Confirm"/>
}
<强>控制器强>
[HttpPost]
public ActionResult ScanLabel(WarehouseGoodsIN goodsin, string btnsubmit)
{
if (btnsubmit == "Confirm")
{
ModelState.Remove("Id")
if (ModelState.IsValid) //modelstate value is false
{
db.WarehouseGoodsINs.Add(goodsin);
db.SaveChanges();
return RedirectToAction("ScanLabelMenu");
}
else
{
// this line is necessary for model validation
return View(goodsin);
}
}
}
答案 2 :(得分:0)
这是构建ViewModel的方式,我发现没有使用KEY数据注释。
Public int ID { get; set; }
[Required]
Public string MissingLabel { get; set; }
从这里开始,结构类似于你所做的动作(例如下面的例子)。
[HttpPost]
Public ActionResult ActionName(WarehouseGoodsIN model)
{
if(ModelState.IsValid)
{
//Do Something
}
Return View(mode)
}
答案 3 :(得分:0)
尝试按顺序添加这些:
第一
@Scripts.Render("~/bundles/jquery")
然后
@Scripts.Render("~/bundles/jqueryval")