【发布时间】:2020-09-20 17:57:50
【问题描述】:
我有以下代码。我也添加了用于验证字段的必要脚本文件,但验证似乎不起作用。即使用户没有提供任何输入,也可以跳过必填字段。有人可以帮忙吗?谢谢! 我在下面发布了部分代码。我的原始代码有更多的下拉菜单,并且没有一个表单验证有效。
型号:
public class User
{
[Required]
[Display(Name = "Gender")]
public string gender { get; set; }
}
}
查看:
<body>
<div>
<div class="card">
<div class="row" style="padding-left:360px;">
<p style="font-size:25px; font-weight: bold; text-align:center; padding-top: 50px; text-
align : center;"><u>Tell Us a Bit about Yourself! </u></p>
</div>
@using (Html.BeginForm("Register", "Register", FormMethod.Post, new { @class = "my_form" }))
{
@Html.ValidationSummary(true, "", new
{
@class ="text-danger"
})
<table class="row" style="background-color:rgba(0, 0, 0, 0);">
<tr>
<td>
@Html.LabelFor(model => model.gender,
htmlAttributes: new { @class = "register.css" })
</td>
<td>
<div>
@Html.DropDownListFor(model => model.gender,
new SelectList(Enum.GetValues(typeof(Gender))), "Select Gender"
)
@Html.ValidationMessageFor(model =>
model.gender, "", new { @class = "text-danger" })
</div>
</td>
</tr>
<tr>
<td></td>
<td class="please-no">
<div>
<button type="submit" class="btn btn-primary" style="
float:right; padding: -20px;">Next</button>
</div>
</td>
</tr>
</table>
}
</div>
<script>
@section scripts{
@Scripts.Render("~/bundles/jqueryval")
}
控制器:
[HttpGet]
public ActionResult Register()
{
return View(new User());
}
[HttpPost]
public ActionResult Register(User user)
{
if (ModelState.IsValid)
{
return RedirectToAction("Register");
}
Session["user"] = user;
return RedirectToAction("PersonalPreference", "Preference");
}
【问题讨论】:
-
您正在编辑的视图是
_Layout.cshtml吗?我问是因为我看到了<body>标记和脚本渲染。我也没有在顶部看到@model指令,说明视图可以期望将User的实例传递给它。如果它不是_Layout.cshtml或自定义布局(如果您刚刚开始,这不太可能),则视图不需要定义<body>。如果你看一下_Layout.cshtml,它里面有一个@RenderBody() 调用。这会将控制器的输出(即 HTML、JS)注入到布局中,因此您无需在每个视图中重新定义布局。 -
@JohnH 是的,我正在使用 layout.cshtml 我的代码开头也有 User 类型的模型。对不起,我应该在问题中添加它..
-
好的,这里有问题。通过将
@model User指令添加到您的_Layout.cshtml,这意味着您期望每个控制器操作 传递User模型。您可以通过创建新控制器、为其创建新模型类型、添加相应视图并在其顶部指定@model NewModel来亲自查看这一点。如果您导航到该路线,它会抛出,因为它仍会期待User。 -
对于您想要做的事情(即拥有一个始终可见的注册表单,无论用户浏览哪个路径),并假设 MVC 5,查看子操作如何工作,特别是使用
@Html.RenderAction()或@Html.RenderPartial()在您的布局中。这将允许您将您拥有的代码移动到一个单独的.cshtml中,该.cshtml需要您的User,同时您可以使用其他模型让其他路线工作。
标签: asp.net asp.net-mvc validation model-view-controller