razor页面的服务器端验证问题



下面是我的数据插入表单的一小部分。我的问题是;第一个表单对象是教室的名称。该字段是必需的,我想在服务器端验证它。正常情况下,它肯定是有效的。但是由于下一个表单对象是一个下拉菜单,从我的数据库表中填充,验证不起作用。当我张贴它与空教室字段,我得到一个错误。通常情况下,服务器端验证工作并停止发布操作,对吗?但事实并非如此。我在这里错过了什么?谢谢你。

PS: DB中的教师字段是可空的,当我在教室文本框中输入一些东西时,表单工作无任何问题。

...
...
<div class="col-8 form-floating p-2">
<input type="text" asp-for="AddClassRoom.Class" class="form-control" />
<label asp-for="AddClassRoom.Class"></label>
<span asp-validation-for="AddClassRoom.Class" class="text-danger"></span>
</div>
<div class="col-8 form-floating p-2">
<select class="form-select" asp-for="AddClassRoom.Teacher" asp-items="@(new SelectList(Model.ApplicationUser.OrderBy(x => x.NameSurname).ToList(),"Id","NameSurname"))">
<option value="">select...</option>
</select>
<label asp-for="AddClassRoom.Teacher"></label>
<span asp-validation-for="AddClassRoom.Teacher" class="text-danger"></span>
</div>
...
...

参考您的评论:

错误;null参数(源)。好吧,这没关系,我知道。但是必须有一种简单的方法来验证具有数据库驱动内容下拉菜单的插入表单。在服务器端验证后,Post和不要得到null

似乎下拉值在发布表单后没有填充。由于您的下拉值来自DB,因此您需要在发布表单后再次从DB获取其项,以便razor页面可以再次填充它。

如果你共享你的后端代码,可以提供更多的支持。

(样本)这是一个基本的示例,取决于你的代码;

<select class="form-select" asp-for="AddClassRoom.Teacher" asp-items="@(new SelectList(Model.ApplicationUser.OrderBy(x => x.NameSurname).ToList(),"Id","NameSurname"))">
<option value="">select...</option>
</select>

后端:


public ActionResult OnGet() {
// ...
ApplicationUsers = GetApplicationUsersFromDb();
Return Page();
}
public ActionResult OnPost() {
// ...
ApplicationUsers = GetApplicationUsersFromDb();
Return Page();
}

最新更新