使用MVC在razor页面之间传递具有不同模型的变量
本文关键字:模型 变量 MVC razor 之间 使用 | 更新日期: 2023-09-27 17:51:02
这是控制器ActionResult所指向的视图:
@model MyDTO
@{
ViewBag.Title = "RecoveryHome";
Layout = "~/_AdminLayout.cshtml";
}
<script>
var postPath = '@Url.Action("Upload", "Onsite")';
var pageData =@Html.Raw(Json.Encode(Model))
</script>
其中MyDTO
为pageData,在_AdminLayout中
@model MyOtherDTO
<html>
<head>
<script type="text/javascript">
var InitData = @Html.Raw(Json.Encode(Model))
</script>
MyOtherDTO
用于InitData。
但是这返回一个异常:The model item passed into the dictionary is of type 'MyDTO', but this dictionary requires a model item of type 'MyOtherDTO'.
一个变量用于标题部分,其余变量用于页面的其余部分,因此将具有不同的模型。
您只能将一个viewmodel
传递给视图,但这并不意味着您只能传递一个'DTO'。
最好不要混淆viewmodel和dto。
public class MyViewData
{
public MyDTO PageData { get; set; }
public MyOtherDTO InitData { get; set; }
}
然后@model MyViewData
var pageData = @Html.Raw(Json.Encode(Model.PageData))
和
@model MyViewData
var InitData = @Html.Raw(Json.Encode(Model.InitData))
编辑:如果您使用布局的基类,您可能会发现这更容易管理,例如:
public abstract class AdminViewModel
{
public MyOtherDTO InitData { get; set; }
}
public class PageViewModel : AdminViewModel
{
public MyDTO PageData { get; set; }
}
那么你可以重用AdminViewModel跨你的管理页面,只要你记得设置InitData
的动作。