这是控制器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'.
一个变量用于标题部分,其余部分用于页面的其余部分,因此将具有不同的模型。 提前谢谢。
答案 0 :(得分:2)
您只能将一个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; }
}
然后,只要您记得在操作中设置InitData
,就可以在管理页面中重复使用AdminViewModel。