2017-12-28 20 views
0

モデルを含むビューで特定のフォームを表示する必要があります。モデルはそのようなものです:私は必要なものをいっぱいビューのオブジェクトリストをフォームとしてモデルをレンダリングするにはどうすればいいですか?

これが最終的なオブジェクトである:

public class ObjetTotal 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public string Numero { get; set; } 
     public string Value { get; set; } 
    } 

私は2つの貴様の部分にフォームをカットすることを選択する:

  • まず「静」の部分ここでは、ユーザは、異なるObjetsTotalに共通の値を設定できます。
  • 第2に、異なる変数ObjetsTotalに対してユーザーが異なる値を入力する「可変」部分。

最後の目的は、ユーザーがすべてのオブジェクトObjetTotalに対して同じことを入力する必要がないことです。

したがって、フォームの異なる部分を表す他のオブジェクトを作成します(わかりません)。

MainObjetの静的部分とNumbersの可変部分。私はこれら2つのオブジェクトを、 "MainObjet"と "Numbers"のリストを含む他のオブジェクト "Mix"に入れます。

public class MainObjet 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
} 

public class Numbers 
{ 
    public string Numero { get; set; } 
    public string Value { get; set; } 
} 

public class Mix 
{ 
    public MainObjet obj { get; set; } 
    public IEnumerable<Numbers> num { get; set; } 

    public Mix() 
    { 
     obj = new MainObjet(); 
     num = new List<Numbers>(); 
    } 
} 

次に、フォームの2つの部分を持つビューで、モデルミックスをレンダリングします。

私はこれを試してみました:

[HttpPost] 
public ActionResult Test(Mix obj) 
{ 
    return View(); 
} 

は、あなたがどのように行うために私を説明できます:

Viewtest

しかし、私はこののActionResultのオブジェクトミックスのヌルを取得提出した後

@model App.Models.Mix 

@using (Html.BeginForm()) { 
@Html.AntiForgeryToken() 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>Mix</legend> 

    <h3>First Properties</h3> 
    <div> 
     @Html.TextBoxFor(model => model.obj.Id); 
     @Html.TextBoxFor(model => model.obj.Name); 
     @Html.TextBoxFor(model => model.obj.Description); 
    </div> 
    <div> 
     <table> 
      @for (int i = 0; i < 5; i++) 
      { 
       <tr> 
        <td> 
         @Html.TextBoxFor(model => model.num[i].Numero) 
        </td> 
        <td> 
         @Html.TextBoxFor(model => model.num[i].Value) 
        </td> 
       </tr> 
      } 
     </table> 
    </div> 

    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 
それ ?私は間違っているかもしれません。

フォームのデザインは考慮しないでください。Numbersに入れるのに適したタイプはわかりません。単純なリストで十分でしょう。

+0

投稿メソッドのパラメータの名前が、プロパティの1つと同じであるためです。それを他のものに変更すれば、それはうまく束縛されます。 –

答えて

0

私が見ることができる事はあなたはパラメータなしのコンストラクタでモデルのプロパティの初期化が欠落しているので、あるためにあなたのモデルコードを更新しよう:モデルバインダーとして

public class Mix 
{ 
    public MainObjet obj { get; set; } 
    public IEnumerable<Numbers> num { get; set; } 

    pubic Mix() 
    { 
     obj = new MainObjet(); 
     num = new List<Numbers>(); 
    } 
} 

はあなたをインスタンス化しますモデルの場合、objnumからnullとなり、値を返すことはできません。

お手伝いします。

+0

私は自分のコードを更新し、httppostでオブジェクトを取得しますが、nullではありませんが、フォームにデータをいくつか入力してもオブジェクトは空です。 – Julien698

+0

あなたのコードは私にとってうまく見える、これはIMOを働かなければならない –

+0

悲しいことに、私はHttppostで空のオブジェクトを取得する、私は控えめではない理由... – Julien698

関連する問題