2010-01-11 56 views
4

使用ASP.NET MVC & Spark,我有一個視圖列出了大量搜索。該視圖的頂部有如下聲明:在使用Spark視圖引擎的部分視圖中使用不同的viewmodel

<viewdata model="IEnumerable<SearchModel>" /> 

在同一個搜索頁面,我也使部分被用作一個彈出窗口,使用戶可以添加新的搜索內容。

我的問題是:在局部視圖我想利用強類型的HTML輔助的,寫:在的頂部

<viewdata model="CreateSearchModel" /> 

${Html.TextBoxFor(model => model.SearchPhrase)} 

但當我添加其他部分視圖文件,Spark失敗只能聲明一個viewdata模型。

我可以使用普通的HTML幫助程序,但是我怎麼能在這個局部視圖中使用強類型的HTML幫助程序呢?還是有更好的方法呢?

回答

8

而不是<使用文件= 「部分」/ >嘗試做

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

這應該解決該單一模式的限制。

+0

非常感謝,這工作。出於好奇,這是Spark的限制嗎? – Martin

+1

是的,它是Spark限制。所有使用的partials都在編譯時包含在生成的頁面.cs中,所以只有一個Page類和一個Model類型。當你使用RenderPartial時,局部在運行時渲染,因此沒有限制。所以我會說,這不是Spark限制 - 它是Spark的附加功能,它有自己的限制;-) – queen3

0

你不能讓你的局部視圖標題是這樣的:

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

,並使用

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

您爲Spark視圖問題發佈了Web窗體視圖引擎代碼。所以,不,他不能製作你指定的局部視圖標題。 Spark將子視圖編譯成一個類,所以它只能有一個TModel。使用Html.RenderPartial()繞過將子視圖編譯到父項中。 –