【问题标题】:Multiple models in ASP viewASP 视图中的多个模型
【发布时间】:2015-05-18 22:39:45
【问题描述】:

我有一个 ASP/MVC 视图,它显示来自模型的数据,还包含一个带有使用不同模型的表单的局部视图。有没有办法让我将这些组合成一个视图?结果会是显示值基于模型A,但是页面中的表单提交模型B。这可能吗?

【问题讨论】:

  • 创建一个视图模型,它将视图所需的模型公开为属性,例如myViewModel.CustomerModel.CustomerNamemyViewModel.OrderModel.OrderNumber 等...
  • 如果是 ASP.NET 而不是 Classic ASP,请始终指出它是 ASP.NET,因为它们非常不同。我已经知道你的意思是 ASP.NET,但新手可能不会。
  • 我为 asp.NET 添加了一个标签...我尽量不把这些东西放在标题/问题中,因为一些混蛋版主喜欢让恼人的 cmets 离开我的问题如何不遵循某些集合规则。

标签: c# asp.net asp.net-mvc


【解决方案1】:

如果这两件事密切相关,您可以在视图中使用视图模型来处理两者:

public class FooViewModel
{
    public SomeModelForDisplay Foo { get; set; }
    public SomeModelForForm Bar { get; set; }
}

在您的操作中,初始化两者:

public ActionResult Foo(int id)
{
    var foo = db.Foos.Find(id);
    if (foo == null)
    {
        return new HttpNotFoundResult();
    }

    var model = new FooViewModel
    {
        Foo = foo,
        Bar = new SomeModelForForm()
    };
    return View(model);
}

如果这两件事根本不相关,或者特别是,如果在布局之类的东西而不是即时视图中调用部分内容,那么使用子操作更合适。本质上,您只需处理显示部分,就好像没有其他事情发生一样:

public ActionResult Foo(int id)
{
    var foo = db.Foos.Find(id);
    if (foo == null)
    {
        return new HttpNotFoundResult();
    }

    return View(foo);
}

然后,您将添加另一个操作来处​​理表单:

[ChildActionOnly]
public ActionResult SomeForm()
{
    var model = new SomeModelForForm();
    return PartialView("_SomeForm", model);
}

然后,添加一个局部视图来仅呈现表单:

Views\Foo\_SomeForm.cshtml

@model SomeModelForForm

<!-- form fields here -->

然后,在您的视图/布局中 - 基本上是您希望实际显示表单的任何位置:

@Html.Action("SomeForm", "Foo")

"Foo" 这里是这个子动作所在控制器的名称。

【讨论】:

    【解决方案2】:

    我建议您使用包含模型 B 和 C 的模型 A。B 在页面加载时加载,C 以部分加载。

    另一个解决方案是你有一个模型 A(给 razor 页面),然后使用 partial 将模型 B 添加到页面,然后它返回 A 和 B 的混合。你只需要注意命名为了使模型绑定正常工作的字段,例如

    A 有

    • 名字
    • 姓氏

    B 有

    • 街道
    • 电话

    那么,如果你把 edirot 放在两个字段中,控制器中可以接收的模型可能是具有

    的模型 C
    • 名字
    • 姓氏
    • 街道
    • 电话

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多