0

私は ASP.NET MVC プロジェクトを行っています。次のようにネストされたモデルがあります。

public class A
.........

public class B
.............

public class AB
{
  public A _a;
  public B _b;
  public AB()
  {
    _a = new A();
    _b = new B();
  }
}

そしてコントローラーで:

public ActionResult Create()
{
  AB model = new AB();
  return View(model);
}

[HttpPost]
public ActionResult Create(AB abModel)
{
  //all properties of abModel._a and abModel._b are null 
  return View(abModel);
}

私のビューは、AB モデル クラスの厳密に型指定されたビューです。ポスト バックされるすべての値が null である理由がわかりません。これは、ネストされたモデルでのみ発生します。何か不足していますか?

私を助けてくれてありがとう

@reneが提案したようにモデルを更新

public class AB
{
  public A _a {get; set};
  public B _b {get; set};
  public AB()
  {
    _a = new A();
    _b = new B();
  }
}

コードを表示:

  @model TestMVC.AB    
    @{
        ViewBag.Title = "Create";
    }
    @using (Html.BeginForm()) {
     @Html.ValidationSummary(true)
       <table cellspacing="0" cellpadding="0" class="forms">

       <tbody>
              <tr><th>
            @Html.LabelFor(model => model._a.ClientName)
      </th>
      <td>
            @Html.TextBoxFor(model => model._a.ClientName, new { @class = "inputbox"})
            @Html.ValidationMessageFor(model => model._a.ClientName)
       </td></tr>
      <tr><th></th><td><input type="submit" value="Create" /></td></tr>
      </tbody></table>

    }
4

2 に答える 2

2

MVC モデル バインダーは、フィールドではなくプロパティにのみバインドします。このモデルは、コントローラーとビューを使用してMVC3で機能します

モデル クラスを次のように変更します。

public class A
{
    public string ClientName { get; set; }
}

public class B
{
    public string Address { get; set; }
}

public class AB
{
    public A  _a { get; set;}
    public B _b { get; set;  }
}
于 2012-09-01T08:50:21.223 に答える
1

モデル バインダーがそれらをキャッチするには、子プロパティとして HTML フォームで名前を付ける必要があります。ビューをどのように構築したかによっては、そのように自動的に生成されない場合があります。フォームを確認してください

<input name="_a.descendant">

子プロパティにテンプレートがあり、それらが自動的に採用されない場合は、次のことが必要になる場合があります。

@{ Html.RenderPartial("Template_A", Model._a, new ViewDataDictionary {
    TemplateInfo = new System.Web.Mvc.TemplateInfo {
         HtmlFieldPrefix = "_a"
    }
});}
于 2012-09-01T08:56:06.103 に答える