web-dev-qa-db-ja.com

別のモデルを部分ビューに渡します

ビューから部分ビューに異なるモデルを渡そうとしています。私はそれらと2つの異なるビューモデルの両方に対して2つの別々のコントローラーアクションを持っています。しかし、ビュー内から部分ビューを呼び出すと、エラーが発生します

ディクショナリに渡されるモデルアイテムのタイプは「Application.ViewModels.Model1ViewModel」ですが、このディクショナリには「Application.ViewModels.PartialViewModel」タイプのモデルアイテムが必要です。

私はこのように呼んでいます:

 @Html.Partial("_CreateUniFunctionPartial")

ビュー内のモデル呼び出しは

@model Application.ViewModels.Model1ViewModel

パーシャルビューファイルのモデルは

@model Application.ViewModels.PartialViewModel

このエラーが発生しないように、部分ビューを渡す方法がわかりません。

編集

部分図

@model Application.ViewModels.PartialViewModel



 @using (Html.BeginForm("partialview", "ApplicationDetail", FormMethod.Post)) 
  {


<div class="form-horizontal">
    <h4>UniFunctionViewModel</h4>
    <hr />
    @Html.ValidationSummary(true)





    <div class="form-group">
        @Html.LabelFor(model => model.detail, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.detail, new { @placeholder = "Further Information" })
            @Html.ValidationMessageFor(model => model.detail)
        </div>
    </div>


</div>

}

17
user3541362

あなたは正しい方法を使用しているが、正しい引数を渡していない

次のように試してみてください。

@Html.Partial("~/[path_to_root_only_if_exists]/_CreateUniFunctionPartial.cshtml", new Application.ViewModels.PartialViewModel())

モデルを渡さない場合、モデルは親から自動的に取得します。

Application.ViewModels.Model1ViewModel
29
alexo

必要なことの1つは、モデルを再生成するか、モデル内のプロパティを利用することです。例えば:

 public class OuterViewModel
 {
     public InnerViewModel InnerViewModel { get; set; }
 }

 public class InnerViewModel
 {
     public string SomeProperty { get; set; }
 }

トップページで、OuterViewModelを受け入れ、InnerViewModelをPartialに渡すことができます。

Outer.cshtml:

 @model OuterViewModel
 @Html.Partial("_InnerPartial", Model.InnerViewModel)

_InnerPartial.cshtml:

 @model InnerViewModel
 @using (Html.BeginForm("Inner", "Controller"))
 {
      <div>
          @Html.AntiForgeryToken()
          @Html.TextBoxFor(m => m.SomeProperty)
          <input type="submit" value="Save" />
      </div>
 }
9

これは非常に簡単です。部分的なビューをレンダリングできるhtmlディレクティブがあります。コードサンプルは次のとおりです。

 @Html.Partial("nameOfPartial", Model)

ここで、モデルはメインコントローラーから取得できます。

または、戻り値の型としてpartialviewresultを使用して新しいコントローラーアクションを定義し、次のようにページでレンダリングを試みることができます。

@{Html.RenderAction("Someaction", "somecontroller");}
2
qamar