Fra*_*nva 8 asp.net-mvc razor asp.net-mvc-4
@model MyMVC.Models.MyMVC.MyModel
@{
    ViewBag.Title = "Index";
}
我之所以提出这个问题的原因是在MVC中我们可以有多个表单,所以我希望每个表单都有一个模型.但是当我尝试在视图顶部添加另一个模型时,它会显示错误.我知道我们可以使用里面有model1和model2的ViewModel,但这不是我要问的问题.
我只是想知道有没有什么方法可以将2个模型放入1个视图中.
更新:
例如,我希望在我的视图中有2个表单,因此对于每个表单,我希望有一个单独的模型.
更新2 谢谢大家的回复.我现在知道MVC只支持一个视图上的单个模型.你们认为这是MVC的缺点吗?为什么或为什么不呢?(没有人回答它......为什么?)
你的答案是相似的,所以我甚至不知道哪一个应该被设置为答案.
Bah*_*man 10
您应该为其他模型使用一些prtialviews.您拥有主模型的主视图.在该视图中,您可以对其模型及其验证进行一些偏好视图.
- - - - - - - - - - - - - - - - - - - 编辑:
正如其他人所说,最好使用View Models并将模型与其他模型相结合.但正如您所希望的,我在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>
简单回答: 不,你不能有两个型号.
详细信息 只有一种方法可以声明视图使用的模型:
@model [namespace].[path].[ViewModelName]
没有办法在上面指定其中的多个.
除此之外,您只能将一个对象发送到Controller的视图,该视图将是模型:
public ActionResult WhateverAction()
{
    var model = new MyViewModel();
    return View(model);
}
理论上你不能这样做,因为它将一个模型绑定到一个视图。但是你可以创建一些类似于模型助手的东西,它将其他两个模型组合成一个
public class model1
{
     string var1 {get; set;}
     string var2 {get; set;}
}
public class model2
{
     string var3 {get; set;}
     string var4 {get; set;}
}
public class modelofBoth
{
     model1 mod1 {get; set;}
     model2 mod2 {get; set;}
}
| 归档时间: | 
 | 
| 查看次数: | 33436 次 | 
| 最近记录: |