c# - ASP.NET MVC(部分的なビュー)を使用して同じページにレビュー製品(http投稿)を追加しようとしています

原文 c# asp.net asp.net-mvc asp.net-mvc-4 razor

_getProductReviews.cshtml:

私は私の部分的なビューを次のように呼んでいます:

<p>@Html.Partial("_CreateR");</p>


_CreateR.cshtml:

このコードは、コントローラーによって自動生成されます。

@model Commerce.Domain.Entites.t_review

@using (Html.BeginForm())

{

@Html.AntiForgeryToken()

<div class="form-horizontal">

    <h4>t_review</h4>

    <hr />

    @Html.ValidationSummary(true)

    <div class="form-group">

        @Html.LabelFor(model => model.text, new { @class = "control-label col-md-2" })

        <div class="col-md-10">

            @Html.EditorFor(model => model.text)

            @Html.ValidationMessageFor(model => model.text)

        </div>

    </div>

    <div class="form-group">

        @Html.LabelFor(model => model.title, new { @class = "control-label col-md-2" })

        <div class="col-md-10">

            @Html.EditorFor(model => model.title)

            @Html.ValidationMessageFor(model => model.title)

        </div>

    </div>

    <div class="form-group">

        @Html.LabelFor(model => model.customer_id, new { @class = "control-label col-md-2" })

        <div class="col-md-10">

            @Html.EditorFor(model => model.customer_id)

            @Html.ValidationMessageFor(model => model.customer_id)

        </div>

    </div>

    <div class="form-group">

        @Html.LabelFor(model => model.product_fk, new { @class = "control-label col-md-2" })

        <div class="col-md-10">

            @Html.EditorFor(model => model.product_fk)

            @Html.ValidationMessageFor(model => model.product_fk)

        </div>

    </div>

    <div class="form-group">

        <div class="col-md-offset-2 col-md-10">

            <input type="submit" value="Create" class="btn btn-default" />

          </div>

      </div>

   </div>

}


ProductController:

// GET: /Product/Create
public ActionResult Create()
{
     return View();
}

//
// POST: /Product/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "id,text,title,customer_id,product_fk")] t_review review)
{
        if (ModelState.IsValid)
        {
            prose.CreateReview(review);
            return RedirectToAction("Index");
        }
        return View(review);
}


actionlinkでシンプルなビューを使用すると機能しますが、部分的なビューを使用しようとするとこのメッセージが表示されます


ディクショナリに渡されたモデルアイテムのタイプは「System.Collections.Generic.List`1 [Commerce.Domain.Entites.t_review]」ですが、このディクショナリにはタイプ「Commerce.Domain.Entites.t_review」のモデルアイテムが必要です。
答え
Html.Partialは、最初にControllerを呼び出さずにビューをレンダリングします。

Html.Actionは、Controller Actionを呼び出します。これは、ビュー、部分ビュー、jsonなど、すべてのように返すことができます。

一般的なガイドラインとして、静的コンテンツを表示する場合、または必要なモデルにアクセスできる場合にのみ、Html.Partialを使用する必要があります。それ以外の場合、たとえばサーバーからより多くのデータを返したい場合は、Html.Actionを使用します。
関連記事

c# - Model3DCollectionとModel3DGroupの違いは何ですか?

java - 相互互換性のためにC#暗号化をJava(Android)暗号化に変換するヘルプ

c# - Mathos Parser-文字を演算子として使用する

c# - mvc scaffolding rawをデータベースから削除

c# - ASP.NET Webアプリケーションをビルドして起動し、Microsoft CodedUIテストを効率的で時間のかからない方法で実行します

c# - マージフィールドを含むステートメントが機能しない場合のMicrosoft Word

c# - LINQ to SQL。実行時にテーブル名を変更する

javascript - MVCプロジェクトのアクションから返されたHTMLファイルのスクリプトへのパスが正しくありません

c# - log4net翌日の開始時にログファイルを上書きする

c# - サービス時間を垣間見る方法