ここで何かがおかしい。
Model.FirstName は null であってはなりません。モデル バインダーは、空の入力フィールド ( textbox ) を "" に設定するほどスマートです。モデルと使用しているテキストボックスの間でプロパティ名が一致していることを確認してください。
どのバージョンの MVC を使用していますか? 1つか2つ?VS 2008 で MVC 1 バージョンを実行していますが、FirstName を null にする唯一の方法は、フォームにまったく含めないことです。
最初の GET Edit ビューでこのエラーがスローされ、dbml とデータベースで FirstName が nullable に設定されているかどうかを確認できましたが、これは 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; }
}
クリーン フィックス ATM はありません。モデル バインダーは、実際にはこれらのプロパティを null に設定しています。コンストラクターで First と Last を "" に設定し、これらのプロパティをバインディングから除外します: [Bind(Exclude="FirstName, LastName")] それらは "" のままです。
これはどこかに文書化されていますか?