MVC 2:基于包含集合属性的模型呈现HTML TextBoxFor

时间:2012-04-09 22:50:10

标签: entity-framework validation asp.net-mvc-2

我是MVC的新手,我仍然在努力解决我认为非常基本的mvc问题。我的目的只是渲染表示数据对象集合的文本框,以便我可以使用DataAnnoations轻松验证它们。我已阅读并理解本教程,并且已经让它工作得很好 - 但它只能一次验证一个人对象,由原语组成:

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

我的问题与这篇文章类似,但是我没有成功将它应用到没有剃刀的情况中:

MVC 3 client-side validation on collection with data annotations -- not working

验证在String和int之类的“原语”上很有用,但我不理解对集合的验证。

这是代表我的对象的一个​​实例和一些验证的类:

public class vc_EBTOCRecord
{
    [StringLength(10, ErrorMessage = "must be under 10 chars")]
    [Required(ErrorMessage = "Problem!")]
    public String ItemText;
}

以下是视图继承的模型:

public class EBTOCViewModel
{
    public List<vc_EBTOCRecord> VcEbtocRecordList { get; set; }

}

这是我的控制器:

     public ActionResult Create()
    {
        EBTOCViewModel ebtocViewModel = new EBTOCViewModel();
        List<vc_EBTOCRecord> vcEbtocRecordList = new List<vc_EBTOCRecord>();

        vc_EBTOCRecord vcEbtocRecord = new vc_EBTOCRecord();
        vcEbtocRecord.ItemText = "bob";
        vcEbtocRecordList.Add(vcEbtocRecord);

        vc_EBTOCRecord vcEbtocRecord2 = new vc_EBTOCRecord();
        vcEbtocRecord.ItemText = "fred";
        vcEbtocRecordList.Add(vcEbtocRecord2);

        vc_EBTOCRecord vcEbtocRecord3 = new vc_EBTOCRecord();
        vcEbtocRecord.ItemText = "joe";
        vcEbtocRecordList.Add(vcEbtocRecord3);

        ebtocViewModel.VcEbtocRecordList = vcEbtocRecordList; 

        return View(ebtocViewModel);
    } 

最后,这是我在我看来尝试的内容:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<vcAdminTool.ViewModels.EBTOCViewModel>" %>
    <h2>Create</h2>

<% using (Html.BeginForm()) {%>
    <%: Html.ValidationSummary(true) %>

    <fieldset>
        <legend>Fields</legend>
        <% foreach(var thing in Model.VcEbtocRecordList)
           {
               Html.TextBoxFor(model => thing.ItemText);       
               //Html.TextBox("hello", thing.ItemText );  didn't work...
               //Html.TextBox("hello");  nope, still didn't work
              Response.Write("a record is here");
           }
             %>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

<% } %>

<div>
    <%: Html.ActionLink("Back to List", "Index") %>
</div>

当视图呈现时,“一条记录就在这里”被打印三次,向我表明MVC识别出我创建的底层对象,但为什么不渲染三个文本框呢?

所需的结果是有三个空白的验证文本框。然后,如果表单有效,我将编写将信息写回数据库的代码。

如果你愿意,我错过了哪些明显的东西?

0 个答案:

没有答案