gpt4 book ai didi

c# - 在 MVC4 View 中针对 ViewModel 执行客户端验证

转载 作者:太空狗 更新时间:2023-10-30 01:21:26 26 4
gpt4 key购买 nike

我想知道根据放置在 ViewModel 字段上的属性处理客户端、javascript 或 jQuery 驱动的 MVC4 字段验证的最佳方法是什么。

首先,让我们选择示例。应用程序首次启动时显示的管理员登录创建屏幕(只是不告诉站点所有者“第一次使用 admin/admin 作为登录名”)。

View 模型:

public class AdministratorViewModel : AbstractViewModel
{
[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblUsername")]
public string Username { get; set; }

[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblEmailAddress")]
[EmailAddress]
public string EmailAddress { get; set; }

[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblPassword")]
[AdminPassword]
public string Password { get; set; }

[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblPasswordConfirm")]
[Compare("Password")]
public string PasswordConfirm { get; set; }

[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblLastLogin")]
public DateTime? LastLogin { get; set; }

[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblPasswordExpiry")]
public DateTime? PasswordExpiry { get; set; }

[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblBlocked")]
public bool Blocked { get; set; }
}

部分 View (创建第一个管理员时只需要几个字段)

@using (Html.BeginForm())
{
@Html.ValidationSummary(false)
@Html.AntiForgeryToken()

<fieldset>
<legend>@ManageAdminsViewResources.legendCreateAdmin</legend>

<div class="desktoptile">
@Html.LabelFor(m=>m.Username)
@Html.EditorFor(m => m.Username)
@Html.ValidationMessageFor(m => m.Username)
</div>

<div class="desktoptile">
@Html.LabelFor(m=>m.Password)
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>

<div class="desktoptile">
@Html.LabelFor(m=>m.PasswordConfirm)
@Html.PasswordFor(m => m.PasswordConfirm)
@Html.ValidationMessageFor(m => m.PasswordConfirm)
</div>

<div class="desktoptile">
@Html.LabelFor(m=>m.EmailAddress)
@Html.EditorFor(m => m.EmailAddress)
@Html.ValidationMessageFor(m => m.EmailAddress)
</div>

<input type="submit" value="@ManageAdminsViewResources.btnCreate"/>
</fieldset>
}

Controller

    [AllowAnonymous]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateFirst(AdministratorViewModel viewModel)
{
if (!ModelState.IsValid) return View(viewModel);
[...................]

目前

如果我在表单中输入了无效的电子邮件地址、空密码等并点击提交,我正确收到错误通知。好的,我们继续

我想要什么

因为我正在做一个 Metro 风格的设计,所以我希望每次用户取消焦点时都会对该字段进行文本框验证。

编写硬编码的 jQuery 片段并不是最好的选择。我想要一种数据驱动的方法,可能嵌入到我目前正在学习的 MVC4 中。

因此,给定一个具有标准 自定义属性的 ViewModel(为此,无论如何,都需要一点 Javascript,想想 Org.Zighinetto.AdminPasswordAttribute检查密码的复杂性),我如何以最不显眼的方式执行客户端验证,而无需在每个 html 标记上指定客户端标记并编写尽可能少的代码?

我必须取消隐藏的 ASP.NET MVC 4 验证中是否还有任何 secret ?

最佳答案

那么,您将必须使用 jQuery 调用 jQuery 验证(因为它是用 jQuery 编写的:))

您可以为您的输入添加一个全局事件,然后在模糊元素上调用它。像这样的东西:

$("input").blur(function () {
$(this).valid();
});

关于c# - 在 MVC4 View 中针对 ViewModel 执行客户端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com