Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Asp.net mvc 类库、MVC和数据注释_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 类库、MVC和数据注释

Asp.net mvc 类库、MVC和数据注释,asp.net-mvc,Asp.net Mvc,我是MVC新手,对正确的设计不确定 我有在各种应用程序中使用的类对象。我已经采取了编写自定义视图模型类的方法,这样我就可以访问所有这些对象中的属性并具有强类型。如果不在视图模型中重新键入我的所有类代码,有没有办法使用数据注释验证这些对象中的属性?如果我的方法和设计都错了,请告诉我 [Required] public User user = new User("username"); //User has lots properites and methods, could i v

我是MVC新手,对正确的设计不确定

我有在各种应用程序中使用的类对象。我已经采取了编写自定义视图模型类的方法,这样我就可以访问所有这些对象中的属性并具有强类型。如果不在视图模型中重新键入我的所有类代码,有没有办法使用数据注释验证这些对象中的属性?如果我的方法和设计都错了,请告诉我

[Required]        
public User user = new User("username");
//User has lots properites and methods, could i validate inside my class code?
//我想要避免的是将以下内容放在我的自定义视图模型类中,//因为我已经有了包含这些内容的类库:

public class User
{

    [Required]
    [StringLength(160)]
    public string prop1 { get; set; }
    [Required]
    [StringLength(160)]
    public string prop2 { get; set; }
    [Required]
    [StringLength(160)]
    public string prop3 { get; set; }

    public User(string token)
    {
        SetUser(token);
    }


    public void SetUser(string token)
    {
        this.prop1 = "this";
        this.prop2 = "this2";
        this.prop3 = "this3";

    }
============
很高兴知道我能,但我在一些问题上遇到了麻烦。在我看来,我有:@Html.EditorFor(modeleItem=>modeleItem.user.prop1)

我把数据注释放在我的类域中。渲染时,它会显示注释

<input class="text-box single-line" data-val="true" data-val-length="The field prop1 must be a string with a maximum length of 5." data-val-length-max="5" data-val-required="The prop1 field is required." id="user_prop1" name="user.prop1" type="text" value="somevalue" />

绝对可以在类代码中包含数据注释属性。如果要在视图模型中封装类,请在视图中填充封装类的属性。在验证过程中,将根据您在类声明中指定的数据注释属性对类成员进行验证。

我也在这方面遇到了困难,我最后做的事情(我不知道这是最好的还是最正确的)是,在我的类库的DOM中,数据注释主要影响数据库,例如MaxLength、Required等,然后在我的视图模型中,我有主要与验证相关的数据注释,例如正则表达式、日期时间格式、最大值或最大长度。通过这种方式,我将系统的两个不同方面的角色分开。视图模型是从我的DOM到我的视图可以使用的格式的转换,我的DOM专门用于定义数据库中的数据应该是什么样子。

很高兴知道我可以,但我在一些问题上遇到了障碍。在我看来,我有:谢谢你的答复。我一直在努力按照你的建议去做,我遇到了一些问题。我把上面的附加信息放在了原来的帖子里。什么参数是空的?您正在使用模型绑定吗?我正在尝试创建自定义模型绑定器。我一直没能让它工作。我的自定义视图模型类有一个通用列表、2个字符串、1个int和我自己创建的2个对象:user和trainingcourse。用户对象有一个设置值的方法,但是,我已经将其移出了构造函数。非常感谢您的帮助。您能发布您的帖子(没有双关语)操作方法吗?这是我代码的简化版本。我不得不拍我的额头。当我创建了一个新视图,并为模型选择了一个强类型视图时,我成功地使验证工作正常。然后在一些测试和增强之后,客户端验证停止工作。由于MVC Asp.net为您做了这么多,我无法跟踪更改的内容。尝试创建另一个新视图并没有解决问题。prop1和prop2参数为空。我注意到您使用了一些单独的属性,而不是视图模型作为操作的参数。如果您的视图模型被称为Training,那么您的签名应该是:public ActionResult ConfirmSignup(Training trainingObject){//code here}。然后,trainingObject对象将由具有模型绑定的视图填充。您可以通过各种方式传递其他参数,但模型绑定允许您将视图模型作为POST操作的参数重新创建,前提是视图是视图模型的强类型。
            @model TrainingCalendar.Models.Training

            @{
                ViewBag.Title = "Signup";
            }

            <h2>Signup</h2>

            <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
            <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

            @using (Html.BeginForm("ConfirmSignup", "Training", FormMethod.Post))
            {
                @Html.ValidationSummary(true)
                <fieldset>
                    <legend>Training</legend>
                    <p>
                    @Html.Label("date", Model.SpecifiedCourse.strClassDate)
                    </p>
                    <p>
                    @Html.Label("time", Model.SpecifiedCourse.Time)
                    </p>
                    <p>
                    @Html.Label("instructor", Model.SpecifiedCourse.Instructor)
                    </p>
                    <p>
                    @Html.Hidden("id", Model.SpecifiedCourse.ID)
                    </p>
                    <table>
                        <tr>
                            <td>@Html.LabelFor(modelItem => modelItem.ApplicationUser.prop1)</td>
                            <td>@Html.EditorFor(modelItem => modelItem.ApplicationUser.prop1)</td>
                            <td style="color:Red">@Html.ValidationMessageFor(modelItem => modelItem.ApplicationUser.prop1)</td>
                        </tr>
                        <tr>
                            <td>@Html.LabelFor(modelItem => modelItem.ApplicationUser.prop2)</td>
                            <td>@Html.EditorFor(modelItem => modelItem.ApplicationUser.prop2)</td>
                            <td style="color:Red">@Html.ValidationMessageFor(modelItem => modelItem.ApplicationUser.prop2)</td>
                        </tr>

                    </table>   
                    <p>
                        <input type="submit" value="Sign Up" />
                    </p>
                </fieldset>
            }

            <div>
                @Html.ActionLink("Back to List", "Index")
            </div>
            public ActionResult ConfirmSignup(
                        int id,
                        string prop1,
                        string prop2)
                    {
                        SignUpForClass();
                    return View();
                }