0

当我调用视图时,我想将模型的类型从 ObjectType1 更改为 ObjectType2。我正在使用 MVC 4。有人可以告诉我这是否可行,如果可以,怎么办?

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Master1.Master" Inherits="System.Web.Mvc.ViewPage<Path.Path.Path.ObjectType1>" %>

场景:我有一个将 ObjectType1 发送到强类型视图的操作。我还在 TempData 中发送了另一个 ObjectType2。在视图中,我显示来自第一个模型和第二个模型的信息。但我想编辑并提交 ObjectType1。现在我有第二个视图,我正在做相反的事情。问题是我有两个代码几乎相同的视图,如果我想从一个切换到另一个,我必须重新加载页面。如果重要,我会使用 Post 方法提交对象。

4

4 回答 4

1

不,视图绑定到一个模型。

如果您可以解释您的实际问题,那么也许可以提出更好的建议,例如更改要求您对不同模型使用相同视图的逻辑。也许可以使用 DisplayTemplates 解决。dynamic如果您不关心强类型、可维护性和可重用性,您甚至可以使用模型。

于 2013-10-10T10:09:53.867 回答
0

如果您有相似的属性名称和类型,请尝试使用dynamictype

ASPX 语法

  Inherits="System.Web.Mvc.ViewPage<dynamic>"

<% if (Model!=null) { 
     //render the value from model
}%>

剃刀

@model dynamic

@if(Model!=null)
{
   <p> @Model.Name </p>
}

在控制器动作中

var model = new  Employee{ Name = "MM", Salary= 2800 };
return this.View(model);
于 2013-10-10T10:17:51.080 回答
0

在这种情况下,我将创建 2 个强类型视图并返回场景所需的任何一个。

您始终可以将部分视图用于 2 个视图之间的公共 ui。

这样每个视图都可以有一个表单,该表单回发到单独的控制器操作,每个控制器都接受不同的模型。

于 2013-10-10T11:02:02.650 回答
0

通常,视图绑定到一个模型。但万一你对此感到好奇?那么你可以使用这个简单的技巧来做到这一点。我多次应用这个技巧,它对我有用。

  • 从你的行动方法。
  • 您必须从 Action 方法返回一个动态值类型。
  • 例如:
  • 在第一种情况下:您必须返回 List
  • 在第二种情况下:您必须返回 List

因此,您可以编写以下代码:

动作方法

public ActionResult foo(int? productId = null, int? customerId = null)
{
    // if ProductId has Value:
    if(productId != null)
    {
        Viewbag.ModelType = "Product";
        //... Logic
        return View((dynamic)(productsList))
    }

    // if CustomerId has Value:
    if(CustomerId != null)
    {
        Viewbag.ModelType = "Customer";
        //... Logic
        return View((dynamic)(CustomerList))
    }
}

看法

@model IEnumerable(dynamic)
//...

if(Viewbag.ModelType == "Customer")
{ // do this.. }

if(Viewbag.ModelType == "Product")
{ // do this.. }

etc...

我希望你明白这个想法...

于 2019-05-31T22:12:21.057 回答