标签: asp.net-mvc-validation

手动调用ModelState验证

我正在使用ASP.NET MVC 3代码优先,我已经将验证数据注释添加到我的模型中.这是一个示例模型:

public class Product
{
    public int ProductId { get; set; }

    [Required(ErrorMessage = "Please enter a name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Required(ErrorMessage = "Please provide a logo")]
    public string Logo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的网站中,我有一个创建新产品的多步骤过程 - 第1步输入产品详细信息,第2步其他信息等.在每个步骤之间我将每个对象(即Product对象)存储在Session中,因此用户可以返回到该过程的那个阶段并修改他们输入的数据.

在每个屏幕上,我都有客户端验证,使用新的jQuery验证.

最后阶段是确认屏幕,之后将在数据库中创建产品.但是,因为用户可以在各个阶段之间跳转,所以我需要验证对象(产品和其他一些对象)以检查它们是否已正确完成数据.

有没有办法以编程方式在具有数据注释的对象上调用ModelState验证?我不想浏览对象上的每个属性并进行手动验证.

如果能够更轻松地使用ASP.NET MVC 3的模型验证功能,我愿意接受如何改进此过程的建议.

.net c# asp.net-mvc asp.net-mvc-validation asp.net-mvc-3

57
推荐指数
2
解决办法
4万
查看次数

MVC数据注释范围验证无法正常工作

RangeValidator在我的模型中有一个属性,只允许0到100之间的整数.我有一个部分视图,显示一个表单,通过jQuery UI对话框更新属性.我查看了源代码,可以确认正确生成了数据注释属性.但是,验证无法正常工作.它确实执行某种验证,但它没有使用我设置的范围.值1,10和100不会产生错误.任何其他单个或两个数字值都会产生错误.但是,如果我用零填充,所有小于100的值都可以.

模型:

public class MyModel
{
  ...
  [Required(ErrorMessage = "{0} is required")]
  [Range(typeof(int), "0", "100", 
         ErrorMessage = "{0} can only be between {1} and {2}")]
  public int Percentage { get; set; }
  ...
}
Run Code Online (Sandbox Code Playgroud)

局部视图:

@model MyApp.Models.Partials.MyModel

<div id="myDialog" class="editModal" title="Update Percentage">
  @using (Ajax.BeginForm("UpdatePercentage", "MyController", 
                         new AjaxOptions() { HttpMethod = "Post", 
                                             OnSuccess = "onUpdateSuccess" }, 
                         new { name = "myForm" }))
  {
    @Html.ValidationSummary(null, new { style = "width:auto;max-width:22em;               
                                                 float:left;clear:both;" })    
    <div style="width:auto;float:left;clear:both;">
      <div style="width:10em;float: left;text-align:right;clear:left;">
        @Html.Label("Percentage:")
      </div> …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery-ui asp.net-mvc-validation data-annotations asp.net-mvc-3

19
推荐指数
1
解决办法
3万
查看次数

requestValidationMode ="2.0"实际上做了什么?


我正在尝试解决"从客户端检测到一个有潜在危险的Request.Form值"问题,并且SO答案和 Scott Hanselman建议设置

<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)

在Web.config中(以及向有问题的方法添加属性).
我意识到这会将验证模式更改为ASP.NET 2.0,但这意味着什么?
而且,这种变化是否有任何我应该注意的副作用?

谢谢.

validation asp.net-mvc asp.net-mvc-validation asp.net-mvc-3

18
推荐指数
1
解决办法
2万
查看次数

ASP.net MVC Validation Hook

我在ASP.net MVC 3中有以下视图:

@model Models.CreateProjectViewModel

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

@using( Html.BeginForm() ) {
    @Html.TextBoxFor(m => m.ProjectName)
    @Html.ValidationMessageFor(m => m.ProjectName)

    <p>
        <input type="submit" value="Save" />
    </p>
}
Run Code Online (Sandbox Code Playgroud)

我正在使用不引人注目的javascript与jQuery和Fluent验证框架.

当我单击"保存"按钮并且验证失败时,是否有一些事件我可以挂钩调用一些自定义的JavaScript?

function validationFailed() {
    // do something here only if validation failed
}
Run Code Online (Sandbox Code Playgroud)

我如何与验证绑定,以便在失败时(并且只有失败)我可以调用validationFailed()函数.

asp.net-mvc asp.net-mvc-validation fluentvalidation unobtrusive-validation asp.net-mvc-3

18
推荐指数
2
解决办法
9887
查看次数

当没有数据发布时,在页面加载时显示MVC Razor验证错误

我正在搞乱数据注释.当我点击链接转到某个页面时,会显示验证消息,但我希望验证消息不显示,除非已发布数据.

视图:

@Html.TextBoxFor(m => m.EmailAddress, new { @placeholder = "Enter Email", @class = "form-control" })
@Html.ValidationSummary(true, "Registration Failed. Check your credentials")
@Html.ValidationMessageFor(m => m.EmailAddress, "You must enter a valid Email Address.")
Run Code Online (Sandbox Code Playgroud)

模型:

[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email Address: ")]
public string EmailAddress { get; set; }
Run Code Online (Sandbox Code Playgroud)

控制器:

[HttpGet]
        public ActionResult AddUser()
        {
            return View();
        }

        [HttpPost]
        public ActionResult AddUser(UserCreateViewModel user)
        {
            if (ModelState.IsValid)
            {
                var success = UserRepository.AddUser(user);

                if (success)
                {
                    return View("Success");
                }
            } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-validation data-annotations razor

18
推荐指数
2
解决办法
2万
查看次数

ValidationMessageFor仅包含model和html属性 - MVC 3

使用MVC 3应用程序.

我需要在验证消息html中添加一个类.我的意思是span标签.

我的模特

 [Required(ErrorMessage = "Role Name is required")]
 [RegularExpression(@"^[a-zA-Z ]+$", 
     ErrorMessage = "Only alphabets and spaces allowed")]
 public string RoleName { get; set; }
Run Code Online (Sandbox Code Playgroud)

标记

  <label for="name">RoleName</label>
  @Html.TextBoxFor(m => m.RoleName)
  @Html.ValidationMessageFor(m => m.RoleName, "some", 
                           new { @class = "immediate" })
Run Code Online (Sandbox Code Playgroud)

但我看不到像@ Html.ValidationMessageFor(m => m.RoleName,htmlAttributes)这样的重载方法 .如果我给出一些文字,它没有显示我在模型中输入的验证消息.它总是只显示一些文字.

对此有任何修复?

asp.net-mvc asp.net-mvc-validation asp.net-mvc-3

17
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC TryValidateModel()修改模型时出现问题

我有一个两步形式的过程,其中第一组数据存储在会话中.

[IsMp4File]
[Required(ErrorMessage = "* Please select a video to upload")]
public HttpPostedFileBase VideoClip { get; set; }

[Required(ErrorMessage = "* Please select a thumbmail image")]
public HttpPostedFileBase VideoThumbnail{ get;  set; }

public string VideoFileName { get { return VideoClip.FileName; } }

public NewsWizardStep CurrentStep { get; set; }
Run Code Online (Sandbox Code Playgroud)

...

public enum NewsWizardStep : int
{
  One = 1,
  Two = 2,
  Three = 3,
  Four = 4,
  Five = 5,
  Six = 6
}
Run Code Online (Sandbox Code Playgroud)

调节器

public ActionResult TvCreate(TvNewsVideoVM modelVM) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asp.net-mvc-validation asp.net-mvc-2

16
推荐指数
1
解决办法
1万
查看次数

如何为MVC创建自定义验证属性

我想为MVC2创建一个自定义验证属性,用于不从RegularExpressionAttribute继承但可以在客户端验证中使用的电子邮件地址.谁能指出我正确的方向?

我尝试了一些简单的事情:

[AttributeUsage( AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false )]
public class EmailAddressAttribute : RegularExpressionAttribute
{
    public EmailAddressAttribute( )
        : base( Validation.EmailAddressRegex ) { }
}
Run Code Online (Sandbox Code Playgroud)

但它似乎对客户不起作用.但是,如果我使用RegularExpression(Validation.EmailAddressRegex)]它似乎工作正常.

asp.net-mvc asp.net-mvc-validation

12
推荐指数
1
解决办法
3万
查看次数

如果模型无效,则使用excludePropertyErrors = true的ASP.NET MVC Validationsummary呈现为空

假设您有一个标准的ValidationSummary:

<%: Html.ValidationSummary(excludePropertyErrors: true) %>
Run Code Online (Sandbox Code Playgroud)

如果ModelState包含属性的模型错误但不包含模型本身的模型错误,则ValidationSummary将呈现以下HTML:

<div class="validation-summary-errors"><ul><li style="display:none"></li></ul></div>
Run Code Online (Sandbox Code Playgroud)

由于列表周围有红色边框,因此显示为空列表但仍然可见.这对我来说似乎是个错误.我可以关闭ValidationSummary助手将呈现一个空列表吗?

asp.net-mvc validationsummary asp.net-mvc-validation

10
推荐指数
1
解决办法
2107
查看次数

嵌套对象的远程ViewModel验证不起作用

我有一个类用户,看起来像这样:

public class User
{
    public int UserId { get; set; }

    [Required(ErrorMessage = "A username is required.")]
    [StringLength(20, ErrorMessage = "Your username must be 4-20 characters.", MinimumLength = 4)]
    [RegularExpression("^[a-zA-Z0-9]*$", ErrorMessage = "Your username can only consist of letters and numbers.")]
    [Remote("UsernameExists", "RemoteValidation", ErrorMessage = "Username is already taken")]
    public string Username { get; set; }

    [Required(ErrorMessage = "A password is required.")]
    [MinLength(4, ErrorMessage = "Your password must have at least 4 letters.")]
    public string Password { get; set; …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-validation asp.net-mvc-3

10
推荐指数
1
解决办法
4644
查看次数