在 MVC 中动态更改模型 asp.net 类型

本文关键字:模型 asp net 类型 MVC 动态 | 更新日期: 2023-09-27 18:34:47

我想

在调用视图时将模型的类型从 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 方法提交对象。

在 MVC 中动态更改模型 asp.net 类型

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

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

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

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);
在这种情况下,

我将创建 2 个强类型视图并返回场景所需的任何视图。

您始终可以为 2 个视图之间的公共 UI 使用分部视图。

这样,每个

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

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

  • 从您的操作方法。
  • 您必须从操作方法。
  • 例如:
  • 在第一种情况下:您必须返回列表
  • 在第二种情况下:您必须返回列表

所以你可以写一些代码列出这个:

操作方法

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...

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