舊帖子,但我想我會添加我目前正在工作的項目中的發現。@Digbyswift說,對於文章,正如你在表單中提到的那樣,對於大多數實例你需要一個SurfaceController。
但是 - 這是我最麻煩的地方。我有一個表單發佈到另一個頁面,該頁面顯示結果,然後在視圖上顯示該數據。我想擺脫使用query strings
並將數據放入session
等等,因爲我們使用的是MVC
。這也允許我返回一個也使用CurrentPage
的自定義視圖,您需要將RenderModel
作爲model
。我們將需要設置一些東西:
1)創建您的控制器,視圖和文檔類型。在這種情況下,我處理瓦特/「成員」,所以我創建了一個Member
文檔類型,MemberController
等
2)就認爲調職形式:
<form method="post" action="member">
<div class="form-group">
<input type="text" id="query" name="query" class="form-control" placeholder="Member Company or State" />
</div>
<input type="submit" value="Search" class="button button-green" />
</form>
你也可以在繼承ApplicationEventHandler
類的類中定義一個自定義路由,並在ApplicationStarted
事件中註冊路由,但這樣我們只會覆蓋Index
操作。
3)在控制器上,MemberController
public class MemberController : RenderMvcController
{
[EnsurePublishedContentRequest(2303)] // 2303 is your node ID
public ActionResult Index(string query)
{
// your code - assign to ViewBag
return View("~/Views/Member.cshtml", this.CreateRenderModel(Umbraco.TypedContent(2303)));
}
}
private RenderModel CreateRenderModel(IPublishedContent content)
{
var model = new RenderModel(content, CultureInfo.CurrentUICulture);
//add an umbraco data token so the umbraco view engine executes
RouteData.DataTokens["umbraco-doc-request"] = model;
return model;
}
您請勿必須這樣做,如果你沒有需要作出的任何macros
做。在我的情況下,我有這個繼承了_layout的視圖。
Custom MVC Routes in Umbraco
我們在這裏做(2)的事情。一個是確保我們得到PublishedContentRequest
。
第二部分是獲取RenderModel
對象。我讀了很多文章,其中您的基本模型應該從RenderModel
繼承,並添加一些默認的Umbraco構造函數,但我沒有很好的運氣。
希望這有助於某人。
這似乎更多的是一般的asp.net mvc練習比umbraco更適合我的問題。您是否在視圖文件中設置了ViewModel?即@ @模型yournamespace.viewmodels.Company ? –
@Eric Herlitz這是特殊的umbraco。根據文檔,我現在被迫爲每個模板的doctype和actionresult設置一個控制器。我發現它很混亂。 –