这里有些奇怪。
Model.FirstName 不应为空;模型绑定器足够聪明,可以将空输入字段(文本框)设置为“”。确保您的模型和您使用的文本框之间的属性名称匹配。
您使用的是哪个版本的 MVC?1 还是 2?我在 VS 2008 中运行 MVC 1 版本,我可以让 FirstName 为空的唯一方法是根本不将它包含在表单中。
我可以看到您最初的 GET Edit 视图是否引发了此错误,并且您在 dbml 和数据库中将 FirstName 设置为可为空,但由于它是 Post,所以现在对我来说没有意义。;)
更新:
我已经确认了这一点:
使用空表格:
- VS 2008 - Mvc 1 - FirstName = ""
- VS 2010 - Mvc 2 - FirstName = null
哦哦...那会破坏很多代码...
编码:
查看(两者相同):
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="FirstName">FirstName:</label>
<%= Html.TextBox("FirstName", Model.FirstName) %>
<%= Html.ValidationMessage("FirstName", "*") %>
</p>
<p>
<label for="LastName">LastName:</label>
<%= Html.TextBox("LastName", Model.LastName) %>
<%= Html.ValidationMessage("LastName", "*") %>
</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
VS 2010-MVC 2
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
public ActionResult AddPerson()
{
var person = new Person();
return View(person);
}
[HttpPost]
public ActionResult AddPerson(Person person)
{
return View(person);
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
VS 2008 - Mvc 1
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
public ActionResult AddPerson()
{
var person = new Person();
return View(person);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddPerson( Person person )
{
return View(person);
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
没有干净的修复自动取款机。模型绑定器实际上将这些属性设置为空。在构造函数中将 First 和 Last 设置为 "",并从绑定中排除这些属性:[Bind(Exclude="FirstName, LastName")] 它们保持为 ""。
这是在某个地方记录的吗?