Как проверить форму в MVC 2, используя Entity Framework - PullRequest
0 голосов
/ 02 марта 2010

Я использую MVC 2 и следую приведенному ниже примеру: Использование валидаторов аннотаций данных с Entity Framework

Когда я нажимаю кнопку «Создать» в представлении «Создать», ничего не происходит.ModelState.IsValid всегда верно. Что может быть не так?

Product.cs

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MyProject.Mvc.Models
{
[MetadataType(typeof(ProductMetaData))]
public partial class Product
{
}

public class ProductMetaData
{
    [Required(ErrorMessage = "Description is required")]
    public object Description { get; set; }
}
}

ProductController.cs

public ActionResult Create()
    {

        Product portal = new Product() { };
        return View(new ProductFormViewModel(portal));
    } 

[HttpPost]
    public ActionResult Create([Bind(Exclude = "ProductId")]FormCollection collection)
    {
        if (ModelState.IsValid)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {

            }
        }
        // If we got this far, something failed, redisplay form
        return View();
    }

Create.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"  
Inherits="System.Web.Mvc.ViewPage<MyProject.Mvc.Models.ProductFormViewModel>" %>
<%= Html.ValidationSummary("Please correct the errors and try again.") %>
<% using (Html.BeginForm()) {%>

     <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.Product.ProductId) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.Product.ProductId) %>
            <%= Html.ValidationMessageFor(model => model.Product.ProductId) %>
        </div>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.Product.ProductName) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.Product.ProductName) %>
            <%= Html.ValidationMessageFor(model => model.Product.ProductName) %>
        </div>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.Product.Description) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.Product.Description) %>
            <%= Html.ValidationMessageFor(model => model.Product.Description) %>
        </div>            
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

<% } %>

ProductFormViewModel.cs

using System.Web.Mvc;

namespace MyProject.Mvc.Models
{
public class ProductFormViewModel
{
    public Product Product { get; private set; }

    public ProductFormViewModel(Product product)
    {
        Product = product;
    }
}
}

1 Ответ

0 голосов
/ 02 марта 2010

Я заметил, что у вас есть атрибут [Required] в свойстве Description, но он имеет тип object. Похоже, это должна быть строка. Вы также передаете коллекцию FormCollection своему действию Create вместо вашей ViewModel.

Похоже, что ваш View строго типизирован для ProductFormViewModel, который имеет свойство Product. Измените свое действие создания:

public ActionResult Create([Bind(Exclude="ProductID")] ProductFormViewModel model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...