2017-05-31 20 views
0

2つの部分的なビューがあり、それぞれに関連付けられた異なるビューモデルがあります。 "AccountNamesPartial" と呼ばれる 第1の部分ビュー:私は部分MVC内の部分レンダリング

@model GACharts.Models.ReportViewModel 
<select class="form-control" id="ChartViewId" name="ChartViewId"> 
         <option>Select View</option> 
@{Html.RenderPartial("AccountNamesPartial", new GACharts.Models.IntergratedAccount.UpdateAccount());} 
</select> 

@using GACharts.Models.IntergratedAccount; 
@model UpdateAccount 
@for (int i = 0; i < Model.Accounts.Count(); i++) 
{ 
<li> 
    <label> 
     @Html.HiddenFor(model => Model.Accounts[i].Id) 
     @Html.CheckBoxFor(model => Model.Accounts[i].Selected) 
     @Model.Accounts[i].Name 
    </label> 
</li> 
} 

は、したがって、上記の部分図は、私は私の第二の部分図で@ Html.RenderPartial( "AccountNamesPartial")にしたいものですもはやスタックトレースエラーは発生しませんが、データは2番目の部分ビューに表示されません。それを稼働させるためのアイデアや提案はありますか?

+0

。それは新しいインスタンスなので、そのインスタンスにはデータはありません。 –

答えて

0

更新を行うフォームをレンダリングするには、更新する実際のオブジェクトをフェッチしてデータを取得する必要があります。あなたはパーシャルを継続して使用する場合は、それはあなたが既に存在しているあなたのReportViewModel上のUpdateAccountビューモデル持ってする必要があるとしている意味:その後

public class ReportViewModel 
{ 
    ... 

    public UpdateAccount UpdateAccount { get; set; } 
} 

を、あなたはあなたのビューを返す前に、あなたの行動でそれを移入したいです:

var account = // fetch, from DB, for example 
reportModel.UpdateAccount = new UpdateAccount { /* map properties over here */ }; 

次に、あなたの部分で:

:また

@Html.Partial("AccountNamesPartial", Model.UpdateAccount) 

、あなたは子供のアクションを使用することができます

[ChildActionOnly] 
public ActionResult AccountNames() 
{ 
    var account = // fetch, from DB, for example 
    var model = new UpdateAccount { /* map properties */ }; 
    return PartialView("AccountNamesPartial", model); 
} 

次に、あなたの部分で:

あなたがUpdateAccount` `の新しいインスタンスを初期化し、部分図にそれを渡しているように見えます
@Html.Action("AccountNames") 
関連する問題