5

我已经广泛搜索了这个并找不到答案,所以我在这里发布这个希望得到帮助。

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

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

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

谢谢您的帮助。

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

4

2 回答 2

2

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

<asp:ModelErrorMessage ID="FirstNameErrorMessage" ModelStateKey="FirstName" runat="server" />
于 2013-07-30T06:01:37.227 回答
1

不幸的是,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

如果您喜欢这个想法,请在用户语音上投票。希望这可以帮助。

于 2013-02-24T18:50:31.200 回答