【问题标题】:Editing and validating complex model in ASP.NET MVC3在 ASP.NET MVC3 中编辑和验证复杂模型
【发布时间】:2011-11-24 16:36:31
【问题描述】:

我有一个使用 EntityFramework 和 SQL2008 的应用程序。我正在使用 DB-first 方法。下面显示了我遇到问题的两个实体:

http://imageshack.us/photo/my-images/339/modelfj.jpg/

Employee Edit.cshtml 的一部分

<div class="client_row">
    <label class="client_label">
        FirstName</label>
    @Html.TextBoxFor(model => model.FirstName, new { @class = "client_edit" })
    @Html.ValidationMessageFor(model => model.FirstName)
</div>
<div class="client_row">
    <label class="client_label">
        LastName</label>
    @Html.TextBoxFor(model => model.LastName, new { @class = "client_edit" })
    @Html.ValidationMessageFor(model => model.LastName)
</div>

    @Html.EditorFor(model => model.Account)

<div class="client_row">
    <span class="client_hr"></span>
    <label class="client_label">
        Email</label>
    @Html.TextBoxFor(model => model.Email, new { @class = "client_edit" })
    @Html.ValidationMessageFor(model => model.Email)
</div>

帐户编辑器文件(EditorFor 用户)

@Html.HiddenFor(model => model.AccountID)
<div class="client_row">
    <label class="client_label">
        Login</label>
    @Html.TextBoxFor(model => model.Login, new { @class = "client_edit" })
    @Html.ValidationMessageFor(model => model.Login)
</div>
<div class="client_row">
    <label class="client_label">
        Password</label>
    @Html.PasswordFor(model => model.Password, new { @class = "client_edit password1" })

我用于验证的部分帐户文件

[MetadataType(typeof(Account_Validation))]
public partial class Account
{
}
[Bind(Exclude = "AccountID")]
public class Account_Validation
{
    [Required]
    [Remote("IsLoginAvailable", "Validation")]
    [Display(Name="Login")]
    public string Login { get; set; }

    [DataType(DataType.Password)]
    [Display(Name="Password")]
    public string Password { get; set; }

}

    @Html.ValidationMessageFor(model => model.Password)
</div>

当我尝试创建员工时,一切正常。我可以插入 Employee 表和 Account 表。我已经实现了标准的远程验证(使用数据注释)来检查登录名的可用性。

当我尝试编辑员工时,问题就开始了。验证不允许我这样做,因为它说已经登录。嗯,这是真的,但我不想改变它。你们能告诉我我做错了什么吗?

【问题讨论】:

  • 您能否提供一个模型上现有 DataAnnotations 的示例?
  • 当然,我刚刚添加了代码示例

标签: asp.net asp.net-mvc-3 entity-framework


【解决方案1】:

我要做的是为 Add Employee 和 Edit Employee 创建一个 ViewModel,让它们都继承自基础 viewmodel

创建帐户和登录的情况类似,只是因为您处理的是同一个实体并不意味着您应该使用相同的验证逻辑。

【讨论】:

  • 一个例子会派上用场。如果我从基类继承(来自 edmx 模型的 Employee),我已经有了 Account 引用,对吗?那么如何为 EntityFramework 模型制作不同的 ViewModel - 一个用于创建,另一个用于编辑操作?
  • 不,您的视图模型将是与您的域对象(员工)没有任何关系的 DTO(数据传输对象)。如果您暂时忽略继承而只关注为表单创建新类的想法,那么您可以使验证逻辑因表单而异。作为旁注,我还建议您查看 fluentvalidation。
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多