【问题标题】:asp.net mvc 3 silverlight like validationasp.net mvc 3 silverlight 类似验证
【发布时间】:2011-08-20 12:34:07
【问题描述】:

主要问题

正如标题所说,我在问是否有人知道如何创建类似于 Silverlight 的数据表单的验证结构。欢迎任何提示、材料、想法。我想做这样的验证:

(您可以查看here

详情

我一直在尝试类似上面的示例,但直到现在都没有结果。主要是因为我不知道验证消息助手是如何工作的。我通过获取 data-val-number 属性并将其设置为链接标题(使用名为 qTip 的第三方 jquery 插件来显示工具提示错误消息)来管理单个验证消息。但是,如果有多个验证,我不能做同样的事情。

那么,是否可以重写验证消息助手?我想更多地了解它如何显示验证消息,以便我可以将它们放在任何 html 内容上。这将完成工具提示部分,我可以设置任意数量的消息,使用我想要的任何格式。

我希望能够通过任何 jquery 事件(鼠标悬停、单击、dblclick、就绪等)显示验证消息。据我了解它的实际实现,仅当用户将焦点从实际输入更改为另一个 html 元素时才会发生验证。

【问题讨论】:

    标签: c# jquery asp.net-mvc validation


    【解决方案1】:

    我强烈建议您查看Professional ASP.NET MVC 中的验证规则部分。它展示了如何使用 ASP.NET MVC v1 完全按照您的描述进行操作,并且它一直工作到 v3。

    显示的用户界面略有不同;但是,您可以检查输出并编写自己的 CSS 以使其看起来像您的屏幕截图。

    举个简单的例子:

    操作结果

    try 
    {
        // code
    }
    catch
    {
        foreach (var issue in std.GetRuleViolations())
        {
            ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
        }
    }
    

    型号

    public IEnumerable<RuleViolation> GetRuleViolations()
    {
        if (!String.IsNullOrEmpty(this.Phone) && !Utility.IsValidPhoneNumber(this.Phone))
        {
            yield return new RuleViolation("Phone is invalid. Try this format: ###-###-####.", "HomePhone");
        }  
    
        yield break;         
    }
    

    编辑视图

    <% 
        using (Html.BeginForm()) 
        {
    %>
    <fieldset>
        <legend>Edit</legend>
        <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
        <%= Html.TextBox("Phone", Model.Phone)%>
        <%= Html.ValidationMessage("Phone", "*")%>
        <!-- more fields go here -->
    </fieldset>
    <% } %>
    

    违反规则的类——从链接中解除

    public class RuleViolation
    {
        public string ErrorMessage { get; private set; }
        public string PropertyName { get; private set; }
    
        public RuleViolation(string errorMessage)
        {
            ErrorMessage = errorMessage;
        }
    
        public RuleViolation(string errorMessage, string propertyName)
        {
            ErrorMessage = errorMessage;
            PropertyName = propertyName;
        }
    } 
    

    【讨论】:

    • 如果我理解正确,我必须为我要验证的每个属性创建每个验证。我的问题是我如何以我想要的方式呈现这些验证错误,因为我不知道 js 脚本如何触发验证事件。我看到您没有使用任何数据注释属性。有什么原因吗?
    • 直接从书上抄来的,是针对MVC1的。在 MVC3 中可能有更优雅的方式来实现,我只是不知道。
    • 是的,就是这样。正如我所说,我不关心 mvc 框架如何创建验证,只是它如何向用户显示它,通过哪些 jquery 事件、方法等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多