首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC AddModelError未显示

MVC AddModelError未显示
EN

Stack Overflow用户
提问于 2014-08-27 00:19:36
回答 2查看 990关注 0票数 1

我看了看this SO post,按照第一个答案做了什么,我也做了同样的事情,但我仍然看不到错误出现。

该模型的相关部分是:

代码语言:javascript
复制
[Display(Name = "Verify13", ResourceType = typeof(Resources.Resource))]
public bool Is13 { get; set; }

控制器是:

代码语言:javascript
复制
if (registerModel.Is13 == false)
{
    ModelState.AddModelError("REGISTER_0", "You must be 13 of age or older to receive email updates.");
    return View(registerModel);
}

视图的一部分是:

代码语言:javascript
复制
@Html.ValidationSummary(true)
...
@Html.LabelFor(model => model.Is13)
@Html.CheckBoxFor(model => model.Is13)
@Html.ValidationMessage("REGISTER_O")

我做错了什么?模型的其余部分在字段上具有属性。整个模型如下所示。错误消息(字段为必填字段)。除了这个以外,所有的错误都会显示出来。

代码语言:javascript
复制
public class RegisterViewModel
{
    [Display(Name = "FirstName", ResourceType = typeof(Resources.Resource))]
    [Required(ErrorMessageResourceType = typeof(Resources.Resource),
              ErrorMessageResourceName = "FirstNameRequired")]
    [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resource),
                      ErrorMessageResourceName = "FirstNameLong")]
    public string FirstName { get; set; }

    [Display(Name = "LastName", ResourceType = typeof(Resources.Resource))]
    [Required(ErrorMessageResourceType = typeof(Resources.Resource),
              ErrorMessageResourceName = "LastNameRequired")]
    [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resource),
                      ErrorMessageResourceName = "LastNameLong")]
    public string LastName { get; set; }

    [Display(Name = "Email", ResourceType = typeof(Resources.Resource))]
    [Required(ErrorMessageResourceType = typeof(Resources.Resource),
              ErrorMessageResourceName = "EmailRequired")]
    [RegularExpression(".+@.+\\..+", ErrorMessageResourceType = typeof(Resources.Resource),
                                     ErrorMessageResourceName = "EmailInvalid")]
    public string Email { get; set; }

    [Display(Name = "ConfirmEmail", ResourceType = typeof(Resources.Resource))]
    [Required(ErrorMessageResourceType = typeof(Resources.Resource),
            ErrorMessageResourceName = "ConfirmEmailRequired")]
    [RegularExpression(".+@.+\\..+", ErrorMessageResourceType = typeof(Resources.Resource),
                                     ErrorMessageResourceName = "EmailInvalid")]
    public string ConfirmEmailAddress { get; set; }

    [Display(Name = "Password", ResourceType = typeof(Resources.Resource))]
    [Required(ErrorMessageResourceType = typeof(Resources.Resource),
              ErrorMessageResourceName = "PasswordRequired")]
    public string Password { get; set; }

    [Display(Name = "ConfirmPassword", ResourceType = typeof(Resources.Resource))]
    [Required(ErrorMessageResourceType = typeof(Resources.Resource),
              ErrorMessageResourceName = "ConfirmPasswordRequired")]
    public string ConfirmPassword { get; set; }

    [Display(Name = "ZipCode", ResourceType = typeof(Resources.Resource))]
    [Required(ErrorMessageResourceType = typeof(Resources.Resource),
              ErrorMessageResourceName = "ZipCodeRequired")]
    public string ZipCode { get; set; }

    public string[] VideoProvider { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }

    [Display(Name = "Verify13", ResourceType = typeof(Resources.Resource))]
    public bool Is13 { get; set; }
EN

回答 2

Stack Overflow用户

发布于 2014-08-27 02:03:22

或者你可以装饰你的房子。

代码语言:javascript
复制
private bool isTrue
{ get { return true; } }

[Required]
[Display(Name = "I agree to the terms and conditions")]
[Compare("isTrue", ErrorMessage = "Please agree to Terms and Conditions")]
public bool iAgree { get; set; }

这是@fields.cage answer here

这样,您就有了您的验证逻辑,并且您可以像绑定其他逻辑一样绑定它。

编辑

下面的代码给出了你想要看到的输出。为了简单起见,我只实现了firstname和is13字段。

型号:

代码语言:javascript
复制
public class RegisterViewModel
{
    [Display(Name = "FirstName")]
    [Required]
    public string FirstName { get; set; }

    public bool isTrue
    { get { return true; } }

    [Display(Name = "Verify13")]
    [Required]
    [System.Web.Mvc.CompareAttribute("isTrue", ErrorMessage = "You must be 13 of age or     older to receive email updates.")]
    public bool Is13 { get; set; }
}

查看:

代码语言:javascript
复制
@using (Html.BeginForm("Index", "Home"))
{
    <table>
        <tr>
            <td>@Html.LabelFor(s => s.FirstName)</td>
            <td>@Html.TextBoxFor(s => s.FirstName)</td>
            <td>@Html.ValidationMessageFor(s => s.FirstName)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(s => s.Is13)</td>
            <td>@Html.CheckBoxFor(s => s.Is13)</td>
            <td>@Html.ValidationMessageFor(s => s.Is13)</td>
        </tr>
    </table>

    <button type="submit">Send</button>
}

控制器:

代码语言:javascript
复制
[HttpPost]
public ActionResult Index(RegisterViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    return View(model);
}
票数 1
EN

Stack Overflow用户

发布于 2014-08-27 00:22:04

您是否将这两个javascript文件添加到您的视图中(用于客户端验证):

代码语言:javascript
复制
~/Scripts/jquery.validate.min.js
~/Scripts/jquery.validate.unobtrusive.min.js

如果你使用的是Ajax.BeginForm( )函数,你还需要这个文件:

代码语言:javascript
复制
~/Scripts/jquery.unobtrusive-ajax.min.js
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25510602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档