我有一个客户模型
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>
答案 0 :(得分:0)
试试这个:
<%: Html.DropDownList("Title", new SelectList(ViewData["CustomerTitles"]), Customer.Title.ToString()) %>
这应该有希望将标题作为字符串传递,这是您的模型所要求的。
答案 1 :(得分:0)
谢谢,我从@Richard A.的回复中学到了这个问题的答案。 我对我的代码进行了一些修改,它运行正常。
我在下面发布,所以可能会帮助一些人。
来自Controller的ViewData
ViewData["Title"] = GetCustomerTitles(customer.Title);
查看
<div class="editor-field">
<%: Html.DropDownList("Title") %>
<br /><%: Html.ValidationMessageFor(model => model.Title) %>
</div>
理念是..在实体中,字段名称是“标题”。发布表单后,编译器检查名为“Title”的HTML元素并分配其值。如果不存在,则将ModelState
的值设置为false。