示例,在ajax形式中,当用户提交表单,并且参数错误时(在帖子后的控制器中),我想在页面上显示一个自定义HTML元素 - 一个内部有文本的div这样,我可以适当地为我的网站设置div。
在寻找答案的过程中,我发现了ModelState.AddModelError() - 如果你只想显示文本而不是div,这很好,因为它只是添加了一个我可以设计的页面,但是我需要不只是一个出现。
有没有人有这方面的好演示/示例?
我添加了一个简单的示例图片,如果密码不正确,我想在右边显示消息(html和css的组合):
答案 0 :(得分:1)
在您的视图中,您可以使用ValidationMessageFor并添加一些类。要使用此功能,请确保使用AddModelError指定了正确的属性名称,或者在与TryValidateModel()
查看代码:
@Html.ValidationMessageFor(model => model.PropertyX, null, new { @class ="error-propertyx" })
验证型号代码:
[Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(ValidationRes))]
public string PropertyX { get; set; }
或者,如果您想要更多参与的内容,您可以使用以下方法
创建一个单独的扩展方法也是一个选项,请注意,这不是最优化的代码,但它会做你想要的:)
public static MvcHtmlString CustomValidatioMessageFor<TModel, TProperty>(this HtmlHelper obj, Expression<Func<TModel,TProperty>> expression){
string html = (string)obj.ValidationMessageFor(expression);
html = "<div>" + html + "</div>";
return new MvcHtmlString(html);
}
答案 1 :(得分:-1)
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class CCompareAttribute : ValidationAttribute, IClientValidatable
{
private const string _defaultErrorMessage = "Confirm password should match with password field.";
private readonly int _minCharacters = Membership.Provider.MinRequiredPasswordLength;
private string name;
public CCompareAttribute(string compare)
: base(_defaultErrorMessage)
{
name = compare;
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentCulture, ErrorMessageString);
}
public override bool IsValid(object value)
{
string valueAsString = value as string;
return (valueAsString != null);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new[]{
new ModelClientValidationEqualToRule(FormatErrorMessage(metadata.GetDisplayName()),name)
};
}
}
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = false)]
public class TypeErrorMessageAttribute : Attribute
{
public string ErrorMessage { get; set; }
public string ErrorMessageResourceName { get; set; }
public Type ErrorMessageResourceType { get; set; }
public TypeErrorMessageAttribute()
{
}
public string GetErrorMessage()
{
PropertyInfo prop = ErrorMessageResourceType.GetProperty(ErrorMessageResourceName);
return prop.GetValue(null, null).ToString();
}
}