首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP MVC 3中一个视图中的两个模型

ASP MVC 3中一个视图中的两个模型
EN

Stack Overflow用户
提问于 2011-04-05 18:49:23
回答 12查看 185.3K关注 0票数 93

我有两个模型:

public class Person
{
    public int PersonID { get; set; }
    public string PersonName { get; set; }
}
public class Order
{
    public int OrderID { get; set; }
    public int TotalSum { get; set; }
}

我希望在单个视图中编辑这两个类的对象,因此我需要如下内容:

@model _try2models.Models.Person
@model _try2models.Models.Order

@using(Html.BeginForm())
{
    @Html.EditorFor(x => x.PersonID)
    @Html.EditorFor(x => x.PersonName)
    @Html.EditorFor(x=>x.OrderID)
    @Html.EditorFor(x => x.TotalSum)
}

当然,这是行不通的:在一个.cshtml文件中只允许有一个“模型”语句。可能有一些变通的方法?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-04-05 18:51:28

创建包含两个模型的父视图模型。

public class MainPageModel{
    public Model1 Model1{get; set;}
    public Model2 Model2{get; set;}
}

通过这种方式,您可以在以后以最小的工作量添加其他模型。

票数 121
EN

Stack Overflow用户

发布于 2012-12-11 12:07:53

要使用元组,您需要执行以下操作,在视图中将模型更改为:

@model Tuple<Person,Order>

要使用@html方法,您需要执行以下操作,即:

@Html.DisplayNameFor(tuple => tuple.Item1.PersonId)

@Html.ActionLink("Edit", "Edit", new { id=Model.Item1.Id }) |

元组表示传递给Item1方法的第一个参数,您可以使用Item2访问第二个模型,依此类推。

在您的控制器中,您需要创建一个类型为Tuple的变量,然后将其传递给视图:

    public ActionResult Details(int id = 0)
    {
        Person person = db.Persons.Find(id);
        if (person == null)
        {
            return HttpNotFound();
        }
        var tuple = new Tuple<Person, Order>(person,new Order());

        return View(tuple);
    }

另一个例子:Multiple models in a view

票数 55
EN

Stack Overflow用户

发布于 2011-09-27 00:58:40

另一个不需要创建自定义模型的选择是使用Tuple<>

@model Tuple<Person,Order>

根据Andi的回答,它不像创建一个包含两者的新类那样干净,但它是可行的。

票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5550627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档