Asp.net-Mvc

在不使用 ViewModel 對象的情況下,Razor 視圖是否可以擁有多個模型?

  • March 17, 2022
@model MyMVC.Models.MyMVC.MyModel

@{
   ViewBag.Title = "Index";
}

我問這個問題的原因是在 MVC 中我們可以有多個表單,所以我想為每個表單都有一個模型。但是當我試圖在視圖頂部添加另一個模型時,它會顯示一個錯誤。我知道我們可以使用內部有 model1 和 model2 的ViewModel,但這不是我要問的問題。

我只是想知道有什麼方法可以將 2 個模型放入 1 個視圖中。

更新:

例如,我想在我的視圖中有 2 個表單,所以對於每個表單,我都希望有一個單獨的模型。

更新 2 謝謝大家的回复。我現在知道 MVC 在一個視圖上只支​​持一個模型。你們認為這是MVC的缺點嗎?為什麼或為什麼不?(還沒有人回答……為什麼?)

你的答案很相似,所以我什至不知道應該將哪一個設置為答案。

您應該為其他模型使用一些 prtialviews。您有主模型的主視圖。在該視圖中,您可以對它們的模型和驗證有一些局部視圖。

                                      • 編輯:

正如其他人所說,最好使用視圖模型並將模型相互結合。但正如你所願,我在我的 Github 帳戶上為你創建了一個範例項目:

https://github.com/bahman616/ASPNET_MVC_multiple_models_in_a_view_with_partialview.git

這是該項目的簡化程式碼:

這裡有兩個模型:

public partial class Person
{
   public int ID { get; set; }
   [Required]
   public string Name { get; set; }
}
public partial class Company
{
   public int Id { get; set; }
   [Required]
   public string Name { get; set; }
}

我想在一個視圖中同時創建視圖,所以這是父視圖:

@model ASP_NET_MVC_Multiple_Models_In_A_View.Models.Person

@{
   ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm("Create","Person")) {
   @Html.ValidationSummary(true)

   <fieldset>
       <legend>Person</legend>

       <div class="editor-label">
           @Html.LabelFor(model => model.Name)
       </div>
       <div class="editor-field">
           @Html.EditorFor(model => model.Name)
           @Html.ValidationMessageFor(model => model.Name)
       </div>

       <p>
           <input type="submit" value="Create" />
       </p>
   </fieldset>
}

<div>
   @Html.ActionLink("Back to List", "Index")
</div>

@{Html.RenderAction("_CompanyCreate", "Company");}

@section Scripts {
   @Scripts.Render("~/bundles/jqueryval")
}

這是部分觀點:

@model ASP_NET_MVC_Multiple_Models_In_A_View.Models.Company

<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

@using (Html.BeginForm("_CompanyCreate","Company")) {
   @Html.ValidationSummary(true)

   <fieldset>
       <legend>Company</legend>

       <div class="editor-label">
           @Html.LabelFor(model => model.Name)
       </div>
       <div class="editor-field">
           @Html.EditorFor(model => model.Name)
           @Html.ValidationMessageFor(model => model.Name)
       </div>

       <p>
           <input type="submit" value="Create" />
       </p>
   </fieldset>
}

<div>
   @Html.ActionLink("Back to List", "Index")
</div>

引用自:https://stackoverflow.com/questions/14516174