1

我有一个客户模型

public class Customer
{
    public virtual int CustomerID { get; set; }

    [Required]
    public virtual string CustomerName { get; set; }

    [Required]
    public virtual string Title { get; set; }

    [Required]
    public virtual string FirstName { get; set; }

    public virtual string LastName { get; set; }

    // Cont..
}

当我将客户创建表单发布到public ActionResult Create(Customer customer)我的操作时CustomerController,它会产生错误ModelState。例如......如果我的代码如下......

[HttpPost]
public ActionResult Create(Customer customer)
{
    customer.Title = "Mr"; // This is what I set for ensuring the field has value

    if (ModelState.IsValid)
    {
        // Code to save customer entity
    }
    // else..
}

在我的 MVC 视图中,它显示客户标题中的错误

例如,如果我if (ModelState.IsValid)从上面的代码中删除该部分,客户实体会保存得很好,我可以在数据库中看到记录。

这里可能是什么问题?

编辑 :

将客户标题传递为IEnumerable<SelectListItem>

ViewData["CustomerTitles"] = GetCustomerTitles();

代码在视图

div class="editor-field">
    <%: Html.DropDownList("CustomerTitles")%>
    <br /><%: Html.ValidationMessageFor(model => model.Title) %>
</div>
4

2 回答 2

0

谢谢,我从@Richard A 的回复中得知了这个问题的答案。我对我的代码做了一些修改,它工作正常。

我把它贴在下面,所以可能会帮助一些人。

来自控制器的 ViewData

ViewData["Title"] = GetCustomerTitles(customer.Title);

看法

<div class="editor-field">
  <%: Html.DropDownList("Title") %>
  <br /><%: Html.ValidationMessageFor(model => model.Title) %>
</div>

想法是..在实体中,字段名称是“标题”。表单发布后,编译器检查名称为“Title”的 HTML 元素并为其赋值。如果不存在,则将 的值设置ModelState为 false。

于 2013-01-08T13:38:22.660 回答
0

尝试这个:

<%: Html.DropDownList("Title", new SelectList(ViewData["CustomerTitles"]), Customer.Title.ToString()) %>

这应该希望将标题作为字符串传递,这是您的模型所要求的。

于 2013-01-08T11:05:40.333 回答