【问题标题】:Validation errors in asp.net 4.5asp.net 4.5 中的验证错误
【发布时间】:2013-02-19 02:30:45
【问题描述】:

我用谷歌搜索了很多,但找不到答案,所以我在这里发布这个希望得到帮助。

我们有一个 asp.net 4.5 项目,在数据库对象类中指定了验证。例如:

[Required(ErrorMessage = "Name is a required field.")]
public string Name { get; set; }

有什么方法可以让我们在表单页面的字段旁边显示此错误消息?验证摘要显示得很好,但我们真的希望它们显示在各自字段旁边,而不使用传统的、代码繁重的 asp.net 验证器(RequiredFieldValidator 和其他)。

感谢您的帮助。

编辑:我们使用的是网络表单,而不是 MVC

【问题讨论】:

  • 您使用的是网络表单还是 MVC?
  • 是的,我发布了一个答案,认为它是 MVC,但后来不确定,我认为他的意思是 WebForms。
  • 我忘了说,是的,我们正在使用网络表单。

标签: c# asp.net asp.net-4.5


【解决方案1】:

您可以使用 ModelErrorMessage 控件。 例如,假设您有一个具有 FirstName 属性的模型。 你会添加这样的东西:

<asp:ModelErrorMessage ID="FirstNameErrorMessage" ModelStateKey="FirstName" runat="server" />

【讨论】:

    【解决方案2】:

    不幸的是,WebForms 模型绑定验证框架还没有 MVC 全面。一方面,数据注释的客户端验证不是内置的。我所知道的显示数据注释错误的唯一方法是通过 ValidationSummary 控件,该控件具有 ShowModelStateErrors 属性(默认为 true)。这是一个超级简单的例子:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:FormView ID="FormView" runat="server" RenderOuterTable="false" ItemType="Person"
                DefaultMode="Insert" InsertMethod="FormView_InsertItem">
                <InsertItemTemplate>
                    <asp:ValidationSummary ID="ValSummary" runat="server" ValidationGroup="FormGroup"
                        HeaderText="The following problems occured when submitting the form:" />
                    <table>
                        <tr>
                            <td>
                                <asp:Label ID="NameLabel" runat="server" AssociatedControlID="NameField">Name</asp:Label>
                            </td>
                            <td>
                                <asp:TextBox ID="NameField" runat="server" Text='<%# BindItem.Name %>' ValidationGroup="FormGroup" />
                            </td>
                        </tr>
                    </table>
                    <asp:Button ID="SaveButton" runat="server" CommandName="Insert" Text="Save" ValidationGroup="FormGroup" />
                </InsertItemTemplate>
            </asp:FormView>
        </form>
    </body>
    </html>
    

    代码背后:

    public partial class create_person : System.Web.UI.Page
    {
        public void FormView_InsertItem()
        {
            var p = new Person();
            TryUpdateModel(p);
            if (ModelState.IsValid)
            {
                Response.Write("Name: " + p.Name + "<hr />");
            }
        }
    }
    

    类:

    using System.ComponentModel.DataAnnotations;
    
    public class Person
    {
        [Required, StringLength(50)]
        public string Name { get; set; }
    }
    

    因为数据注释验证没有客户端/javascript 支持,所以生成模型状态错误的唯一方法是在回发之后。如果您需要在控件旁边进行内联验证,您仍然需要使用标准验证控件。

    我已经发布了关于用户语音的功能请求,要求他们考虑改进数据注释集成: http://aspnet.uservoice.com/forums/41202-asp-net-web-forms/suggestions/3534773-include-client-side-validation-when-using-data-ann

    如果您喜欢这个想法,请为用户的声音投票。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 2023-03-05
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多