【发布时间】:2019-01-11 12:04:50
【问题描述】:
因此,在为我的模型输入文本时,它始终有效,即使我明确要求它具有 minLength,尽管它为空或小于 minLength。
型号:
public class CommentaarCreate_VM
{
public Stad Stad { get; set; }
[Required]
public Commentaar Commentaar { get; set; }
}
public class Commentaar
{
[Key]
public int CommentaarId { get; set; }
[Required]
public string UserId { get; set; }
[Required]
public int StadId { get; set; }
[Required(AllowEmptyStrings=false, ErrorMessage="You need to enter a comment of valid length")]
[MinLength(5, ErrorMessage ="You need to enter a comment of valid length")]
public string CommentaarText { get; set; }
[Required]
[DataType(DataType.DateTime)]
public DateTime Tijdstip { get; set; }
}
查看:
@model DataGent.Web.ViewModels.CommentaarCreate_VM
@{
ViewData["Title"] = "Create new comment";
}
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="All" class="text-danger"></div>
<input type="hidden" asp-for="Stad.Id" />
<input type="hidden" asp-for="Stad.Naam" />
<input type="hidden" value="@Html.AntiForgeryToken()" />
<div class="form-group">
<label asp-for="Commentaar" class="control-label"></label>
<input asp-for="Commentaar" class="form-control" />
<span asp-validation-for="Commentaar.CommentaarText" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</form>
</div>
控制器动作:
public ActionResult Create(int id)
{
CommentaarCreate_VM vm = new CommentaarCreate_VM()
{
Stad = _dataGentService.GetStadFromId(id),
Commentaar = null
};
return View(vm);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind("CommentaarText, Tijdstip")] int id, IFormCollection collection) //Bind = protect from overposting
{
try
{
// Creating object to POST
Commentaar commentaar = new Commentaar
{
UserId = _userManager.GetUserId(HttpContext.User),
StadId = id,
CommentaarText = collection["Commentaar"],
Tijdstip = DateTime.Now
};
var result = _dataGentService.PostCommentaar(commentaar);
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
我有什么遗漏吗?我以为除了数据注释之外的所有工作都是由 MVC 完成的?
【问题讨论】:
-
在appsetting下的web.config中检查ClientValidationEnabled和UnobtrusiveJavaScriptEnabled是否设置为true。
-
你说的是客户端验证还是服务器端?在服务器端,您永远不会检查 ModelState.IsValid。你怎么知道你的模型状态是否有效?
-
@Fran 客户端验证。
-
@SuprabhatBiswal web.config 显然在这个版本的 ASP 中不再存在,我确实尝试通过 startup.cs 服务手动启用它,但这并没有改变,所以我猜它是开启的默认情况下。
标签: c# asp.net asp.net-mvc validation model