有关MVC数据注释,编辑器模板和验证的问题

时间:2010-11-02 17:37:42

标签: asp.net-mvc-2 entity-framework-4 data-annotations

上下文:使用EF的MVC 2应用程序。

为什么有些工作,但有些不工作?显示名称设置为“Court Name”但未进行验证,即我没有看到错误消息。我认为编辑器模板干扰了验证,否则Model.IsValid不适用于复杂的视图模型。

有什么想法吗?

PARTIAL CLASS:

[MetadataType(typeof(CourtMetaData))]
public partial class Court
{

    private class CourtMetaData
    {

        [Required(ErrorMessage = "Court Name is required")]
        [DisplayName("Court Name")]
        public System.String CourtName
        {
            get;
            set;
        }

    }

}

控制器:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult New(CourtsNewViewModel court)
{
    if (ModelState.IsValid)
    {
        db.AddCourt(court);
        return View("List");
    }
    else
    {
        return View("New", court);
    }
}

查看模特:

public class CourtsNewViewModel : ViewModelBase
{

    public Court Court {get; private set; }

    public IEnumerable<CourtType> CourtTypes { get; private set; }

    public CourtsNewViewModel()
    {
        CourtTypes = db.GetAllCourtTypes();
    }

}

查看:

Html.EditorFor(model => model.Court.CourtName, "LongString")

编辑模板:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.String>" %>
<div class="editor-row">
<div class="editor-label">
    <%= Html.LabelFor(model => model) %>
</div>
<div class="editor-field">
    <%= Html.TextBoxFor(model => model)%>
    <%= Html.ValidationMessageFor(model => model) %>
</div>
</div>

1 个答案:

答案 0 :(得分:1)

这是陷阱:

public ActionResult New(CourtsNewViewModel court)

court变量已被使用,因为您的模型上有Court属性。

现在重命名参数:

public ActionResult New(CourtsNewViewModel courtModel)

一切都应该按预期工作。