2010-02-18 40 views
2

我有一個微軟MVC項目與動作,其視圖(「Foo.aspx」)「富」包含線路:Html.ActionLink()給我一個空鏈接時,我用它裏面Html.RenderAction()

<%= Html.ActionLink("mylinktext1", "bar") %> 
<%= Html.ActionLink<MyController>(x => x.Bar(), "mylinktext2") %> 

當我打這個從網絡瀏覽器或AJAX調用加載它,它正確返回:

<a href="/bar">mylinktext1</a> 
<a href="/Bar">mylinktext2</a> 

但是,當我打電話從另一種觀點認爲這樣的動作:

<% Html.RenderAction<MyController>(x => x.Foo()); %> 

然後鏈接呈現沒有目標。

<a href="">mylinktext1</a> 
<a href="">mylinktext2</a> 

爲什麼會發生這種情況,我該如何解決它?

回答

2

我不知道這是你做錯了什麼,但我從來沒有使用Html.RenderAction與返回ASPX視圖的操作。當我調用RenderAction時,我確保我調用返回ASCX View User Control的控制器操作。

通常.ASPX文件是整個頁面,您不能(不應該)在另一個頁面內渲染它。 所以我認爲你應該使它查看用戶控制(ASCX)並將其放置在Shared或控制器的視圖文件夾中。

根據你的意見: 當然這很好。您只需將數據作爲模型返回到視圖/視圖用戶控件。當你通過AJAX加載它們時,你應該考慮將渲染視圖實現爲字符串。搜索Google或Stack以獲取更多信息。您也可以爲您的操作方法搜索一個名爲JsonPox屬性的東西 - 也可以在互聯網上的某處執行。它將啓用裝飾你的動作方法,以便他們能夠返回HTML視圖,XML或JSON,如果這也是你可能需要的。

+0

讓AJAX操作返回用戶控件視圖有意義嗎? 我的項目有可以直接通過HTTP訪問的操作,但我也希望能夠訪問從其他頁面呈現其視圖。例如,假設我有一個AJAX調用來動態更新頁面的一部分,但是當該頁面首次被渲染時,我想在不調用該動作的情況下合併頁面的這一部分,因爲頁面動作已經計算了所有的值AJAX行動將不得不計算。該頁面可以將變量填充到部分中。這是明智的做法嗎? – 2010-02-19 16:15:43

+0

我將.aspx文件切換到.ascx文件,同樣的問題仍然存在。 <%= Html.ActionLink(「mylinktext1」,「bar」)%>顯示與href =「」的鏈接。 – 2010-03-08 17:00:48

+0

啊哈。使用<%Html.RenderAction (x => x.Foo()); %>導致問題。使用<%Html.RenderAction(「Foo」,「MyController」); %>正常工作。爲什麼鍵入的版本會失敗並且魔術字符串版本有效? – 2010-03-08 18:36:34

相關問題