6

私は2つの簡単な方法でコントローラーを持っています:

UserControllerメソッド:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Details(string id)
{
 User user = UserRepo.UserByID(id);

 return View(user);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Details(User user)
{
 return View(user);
}

次に、詳細を表示するための1つの簡単なビューがあります。

<% using (Html.BeginForm("Details", "User", FormMethod.Post))
   {%>
 <fieldset>
  <legend>Userinfo</legend>
  <%= Html.EditorFor(m => m.Name, "LabelTextBoxValidation")%>
  <%= Html.EditorFor(m => m.Email, "LabelTextBoxValidation")%>
  <%= Html.EditorFor(m => m.Telephone, "LabelTextBoxValidation")%>
 </fieldset>
 <input type="submit" id="btnChange" value="Change" />
<% } %>

ご覧のとおり、エディターテンプレート「LabelTextBoxValidation」を使用しています。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%= Html.Label("") %>
<%= Html.TextBox(Model,Model)%>
<%= Html.ValidationMessage("")%>

ユーザー情報の表示は問題ありません。ビューは完全にユーザーの詳細をレンダリングします。フォームを送信すると、オブジェクトユーザーが失われます。「returnView(User);」の行をデバッグしました。Post Detailsメソッドでは、ユーザーオブジェクトはnull許容値で埋められます。エディターテンプレートを使用しない場合、ユーザーオブジェクトは正しいデータで埋められます。したがって、エディターテンプレートに何か問題があるはずですが、それが何であるかを理解することはできません。提案?

4

1 に答える 1

1

LabelTextBoxValidation エディターを Html ヘルパーに変更し、データ モデル用に 1 つの EditorTemplate を作成します。そうすれば、次のようなことができます。

<% using (Html.BeginForm("Details", "User", FormMethod.Post))
{%>
  <fieldset>
   <legend>Userinfo</legend>
   <% Html.EditorFor(m => m); %>
  </fieldset>
  <input type="submit" id="btnChange" value="Change" />
<% } %>

エディター テンプレートは次のようになります。

<%= Html.ValidatedTextBoxFor(m => m.Name); %>
<%= Html.ValidatedTextBoxFor(m => m.Email); %>
<%= Html.ValidatedTextBoxFor(m => m.Telephone); %>

ValidatedTextBoxFor は新しい html ヘルパーです。それを行うには、かなり簡単です。

public static MvcHtmlString ValidatedTextBoxFor<T>(this HtmlHelper helper, Expression thingy)
{
     // Some pseudo code, Visual Studio isn't in front of me right now
     return helper.LabelFor(thingy) + helper.TextBoxFor(thingy) + helper.ValidationMessageFor(thingy);
}

それが問題の原因のように思われるので、フォームフィールドの名前を正しく設定する必要があります。

編集:これがあなたを助けるコードです:

public static MvcHtmlString ValidatedTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
    return MvcHtmlString.Create(
           html.LabelFor(expression).ToString() +
           html.TextBoxFor(expression).ToString() +
           html.ValidationMessageFor(expression).ToString()
           );
}
于 2010-04-29T13:07:30.803 に答える