在 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 方法提交对象。
不,视图绑定到一个模型。
如果你能解释你的实际问题,那么也许可以提出更好的建议,例如更改需要你对不同模型使用相同的视图的逻辑。也许可以使用显示模板来解决。如果您不关心强类型、可维护性和可重用性,您甚至可以使用 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...
我希望你明白这个想法...