0
<% using (Html.BeginForm("Create", "User", FormMethod.Post, new { id = "frmCreateUser", name = "frmCreateUser" })){%>

Createメソッド名であり、メソッドがコントローラー名であるコントローラーにフォームデータを送信しようとしていますuser。メソッドの構文

 [AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Create(User UserToCreate)
 {
  //Controller action
 }

テキストボックスの構文

  <%: Html.TextBoxFor(model => model.UserName, new {id="UserName", size="30" })%>

Create で呼び出しは正常に行われますが、User オブジェクトが null を返すのはなぜですか?

4

3 に答える 3

2

ヘルパー メソッドはTextBoxFor入力ボックスに一意の ID を割り当てます。これにより、MVC は、サーバーに投稿するときにプロパティをマップできます。ID を上書きするとマッピングが失敗するため、テキスト ボックスのコードを次のように変更します。

<% Html.TextBoxFor(model => model.UserName, new { size = 30 }) %>

明確にするために、MVCnameは入力フィールドのプロパティを使用してプロパティをマップします。ただし、idプロパティのオーバーライドがこれに影響していると思われます。これを明確にするために HTML 出力を確認できます。名前は のようになりますuser.username

編集

コードを小さな MVC3 プロジェクトにサンドボックス化すると、うまく機能しました (ID を設定しても!)。使用しているタグを見ると、3 ではなく MVC2 を使用しているように見えますか?

于 2012-07-03T12:51:14.853 に答える
1

id プロパティを割り当てる必要はありません。ビューが次のように (ユーザーによって) 強く型付けされていることを確認してください。

@model User
于 2012-07-03T12:56:08.347 に答える
0

暗闇の中の刺し傷かもしれませんが、id="UserName" の部分を削除してください。

コントローラが特定のクラスにマップされている場合。このようなものは問題ないはずです。

@model  SomeSite.ViewModels.VM_User    

@Html.TextBoxFor(model => model.UserName, new { Class = "ui-corner-all FormElement ui-widget-content" })
于 2012-07-03T12:52:20.423 に答える