Asp.net 使用Spark view引擎在局部视图中使用不同的viewmodel

Asp.net 使用Spark view引擎在局部视图中使用不同的viewmodel,asp.net,asp.net-mvc,spark-view-engine,Asp.net,Asp.net Mvc,Spark View Engine,使用ASP.NETMVC和Spark,我有一个视图列出了许多搜索。视图顶部有以下声明: <viewdata model="IEnumerable<SearchModel>" /> 但当我添加另一个: <viewdata model="CreateSearchModel" /> 在局部视图文件的顶部,Spark失败,只能声明一个viewdata模型。 我可以使用普通的HTML帮助程序,但是在这个局部视图中使用强类型HTML帮助程序的好处是什么?或者有更好

使用ASP.NETMVC和Spark,我有一个视图列出了许多搜索。视图顶部有以下声明:

<viewdata model="IEnumerable<SearchModel>" />
但当我添加另一个:

<viewdata model="CreateSearchModel" />

在局部视图文件的顶部,Spark失败,只能声明一个viewdata模型。

我可以使用普通的HTML帮助程序,但是在这个局部视图中使用强类型HTML帮助程序的好处是什么?或者有更好的方法吗?

而不是尝试这样做

# Html.RenderPartial("partial", mydata);

这应该可以解决单一模型的限制。

您不能将局部视图标题设置为:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CreateSearchModel>" %>

和使用

<% Html.RenderPartial("../PartialView", (CreateSearchModel)ViewData["MyCreateSearchModel"] ); %>


非常感谢,这很有效。出于好奇,这是火花限制吗?是的,这是火花限制。所有使用的部分都在编译时包含在生成的page.cs中,因此只有一个page类和一个模型类型。使用RenderPartial时,将在运行时渲染部分,因此没有限制。所以我想说,这不是Spark的限制——这是Spark的附加功能,有其自身的限制;-)您发布了Spark视图问题的Web表单视图引擎代码。所以,不,他不能使部分视图标题与您指定的相同。Spark将子视图编译为单个类,因此它只能有一个TModel。使用Html.RenderPartial()可以绕过将子视图编译为父视图的过程。
<% Html.RenderPartial("../PartialView", (CreateSearchModel)ViewData["MyCreateSearchModel"] ); %>