簡體   English   中英

將不同的模型傳遞給局部視圖

[英]pass a different model to the partial view

我試圖從視圖中將不同的模型傳遞給局部視圖。 我有兩個獨立的控制器動作,它們和兩個不同的視圖模型。 但是當我從視圖中調用局部視圖時,它會給我錯誤

傳遞到字典中的模型項的類型為“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>

}

你正在使用正確的方法,但沒有傳遞正確的參數

你可能想這樣試試:

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

如果你沒有傳入一個模型,它會自動從它的父模型中獲取一個,在你的情況下是

Application.ViewModels.Model1ViewModel

您需要做的一件事是重新生成模型或使用模型中的屬性。 例如:

 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>
 }

這很簡單。 有一個html指令可以呈現局部視圖。 以下是代碼示例:

 @Html.Partial("nameOfPartial", Model)

現在,模型可以來自您的主控制器。

或者您可以使用partialviewresult作為返回類型定義新的控制器操作,並嘗試在頁面中呈現它,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM