Здесь что-то странное.
Model.FirstName не должно быть нулевым; связыватель модели достаточно умен, чтобы установить пустое поле ввода (текстовое поле) в «». Убедитесь, что имена ваших свойств совпадают между вашей моделью и текстовыми полями, которые вы используете.
Какую версию MVC вы используете? 1 или 2? Я использую версию MVC 1 в VS 2008, и единственный способ заставить FirstName быть нулевым, это вообще не включать его в форму.
Я мог видеть, если вы в исходном представлении GET Edit выдавали эту ошибку, и вы установили для FirstName значение nullable в вашей базе данных и базе данных, но, поскольку это пост, это сейчас не имеет смысла для меня. ;)
Обновление:
Я подтвердил это:
С пустой формой:
- 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; }
}
Нет чистой починки. Связыватель модели фактически устанавливает эти свойства в null. Установите First и Last на "" в конструкторе и исключите эти свойства из привязки: [Bind (Exclude = "FirstName, LastName")] они остаются "".
Это где-то задокументировано?