2

ビューで部分ビューを使用しようとしています。最初のビューにはモデルが必要ですが、部分ビューには同じモデルの IEnumerable が必要です。次のエラーが表示されます。

The model item passed into the dictionary is of type 'MyVDC.Models.LogBook', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyVDC.Models.LogBook]'.

コントローラーで:

public ActionResult Create(string phn)
    {
        phn = MySession.Current.PHN;
        ViewBag.PHN = MySession.Current.PHN;
        LogBook logBook = new LogBook();
        try
        {
            logBook = db.LogBooks.Where(c => c.PHN == phn).OrderByDescending(x => x.Day).First();
        }
        catch
        {
            logBook.Day = DateTime.Now.Date;
            logBook.PHN = phn;
        }
        return View(logBook);
    }

部分ビューの 2 番目のアクション:

 public ActionResult Grid()
        {
            string phn = MySession.Current.PHN;
            return View(db.LogBooks.ToList().Where(c => c.PHN == phn));
        }

最初のビュー:

@model MyVDC.Models.LogBook
@{

}
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <input type="hidden" name="PHN" id="PHN" value="@ViewBag.PHN" />
    <fieldset>
        <legend>LogBook</legend>
        @(Html.Telerik().DatePicker()
            .Name("Day")

    )
        <p>
            <input type="submit" value="Start New Logbook" class="t-button" />
        </p>
    </fieldset>
}
<div>
</div>
     @Html.Partial("Grid")

2 番目のビュー:

@model IEnumerable<MyVDC.Models.LogBook>

@(Html.Telerik().Grid(Model)
        .Name("Grid")
        .Columns(columns =>
        {

            columns.Bound(o => o.Day).Format("{0:MM/dd/yyyy}").Width(120);
        })
        .DataBinding(dataBinding => dataBinding.Ajax().Select("Grid", "LogBook"))
        .Pageable()
        .Sortable()
        .Filterable()
)

ご提案いただければ幸いです。以下を参照してください。

4

2 に答える 2

0

使用の問題Html.Renderは、2つのビューに関連付けられているタイプが同じである必要があることです。Html.RenderActionの代わりに使用できますHtml.Render。このアプローチを使用する場合、ビューに関連付けられているタイプは重要ではありません。次のようなものが必要になります。

@{ Html.RenderAction("Grid"); }
于 2012-12-10T07:33:55.943 に答える
0

次のようにViewDataを使用して、私はそれを理解しました:

   ViewData["Log"] = db.LogBooks.ToList().Where(c => c.PHN == phn);

ビューで:

@(Html.Telerik().Grid((IEnumerable<MyVDC.Models.LogBook>)ViewData["Log"])

これが誰かに役立つことを願っています。

于 2012-12-10T05:32:37.953 に答える