Asp.net-Mvc
在不使用 ViewModel 對象的情況下,Razor 視圖是否可以擁有多個模型?
@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>