Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net mvc中未显示模型验证_C#_Asp.net_Asp.net Mvc_Validation_Asp.net Mvc 4 - Fatal编程技术网

C# asp.net mvc中未显示模型验证

C# asp.net mvc中未显示模型验证,c#,asp.net,asp.net-mvc,validation,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Validation,Asp.net Mvc 4,我正在使用Asp.NETMVC4和.NET4.5。我有一个视图,在编辑模式下显示班级名称、班级教师名称和该班级的学生列表。我的主要观点是 public class Class { public int ClassId { get; set; } public string ClassName { get; set; } public string ClassTeacherName { get; set; } [RequiredInList(FieldName

我正在使用Asp.NETMVC4和.NET4.5。我有一个视图,在编辑模式下显示班级名称、班级教师名称和该班级的学生列表。我的主要观点是

public class Class
{
    public int ClassId { get; set; }

    public string ClassName { get; set; }

    public string ClassTeacherName { get; set; }

    [RequiredInList(FieldName = "LastName", ErrorMessageResourceType = typeof(ErrorMessagesResource), ErrorMessageResourceName = "Required")]
    public List<Student> Students { get; set; }
}
我的自定义属性为

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = true)]
public class RequiredInListAttribute : RequiredAttribute
{
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string FieldName { get; set; }

    /// <summary>
    /// The is valid.
    /// </summary>
    /// <param name="value">
    /// The value.
    /// </param>
    /// <param name="validationContext">
    /// The validation context.
    /// </param>
    /// <returns>
    /// The <see cref="ValidationResult"/>.
    /// </returns>
    /// <exception cref="InvalidOperationException">
    /// Invalid operation exception
    /// </exception>
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var val = value as IEnumerable;
        if (value == null || val == null)
        {
            throw new InvalidOperationException("This attribute Required In List is intended to use only on list");
        }

        var isInvalidFiled =
            (val.Cast<object>().Select(v => v.GetType().GetProperty(this.FieldName).GetValue(v, null))).Any(
                property => property == null);

        return !isInvalidFiled
                   ? ValidationResult.Success
                   : new ValidationResult(string.Format(this.ErrorMessageString, "Last Name"), new[]{"Students[0].LastName"});
    }
}

现在我的问题是,在发布表单后,即使没有提供姓氏,也不会出现错误。

将此内容放在您的CSHTML页面上:

 @Html.ValidationSummary()
您也可以在cshtml中的每个字段后使用类似的内容:

  @Html.ValidationMessageFor(model => model.StudentID)

…调试这段代码告诉你什么?调试期间isInvalidField的值是多少?isInvalidField的值将变为True。因此,应该添加理想的验证消息。但它不会出现在要添加到客户端或服务器端?服务器端的viewValidation消息中。现在不需要客户端。为什么不编辑您的问题并添加CSHTML文件?那会有帮助的。
  @Html.ValidationMessageFor(model => model.StudentID)