2009-09-18 86 views
6

我有幾個視圖呈現的部分視圖,這些視圖由多個操作方法返回。ASP.NET MVC - 如何從局部視圖中獲取當前操作?

部分視圖具有應回發到被調用的操作方法的表單。

這是我的理解是,如果我只是叫

<% Html.BeginForm(); %> 

從視圖中,表單的action屬性將指向被調用動作方法。 我不能這樣做,因爲我需要爲javascript目的設置表單的ID屬性。 Html.BeginForm的重載讓我設置html屬性也需要一個明確的控制器和動作。因此,我可以不使用Html幫手,而是將表單元素寫出來:

<form action="<%=(NEED TO SOMEHOW GET THE URL TO THE CURRENT ACTION) %>" method="post" id="myForm"> 

我只是不確定如何獲取URL。

回答

14

只需傳遞null作爲控制器和操作。正確的值將被替換。例如:

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "employeeGroupForm" })) 
+1

+1 - 當然,這是我的方式,然後有簡單的方法:) – 2009-09-18 15:34:17

+0

讓我笑! :) – 2009-09-18 15:54:24

0

在這種情況下,我可能只是讓控制器(或父視圖)在您的model/ViewData中放置適當的目標URL。

至於怎麼樣,你的控制器內:

public ActionResult MyAction() { 
    MyModel m = new MyModel(); 

    ... 

    m.MyControlAction = "MyAction"; 
    m.MyControlController = "MyController"; 

    return View("MyView", m); 
} 
在你看來

然後:

Html.RenderPartial("MyControl", ViewData.Model); 

而在你的部分觀點:

Html.BeginForm(ViewData.Model.MyControlController, ViewData.Model.MyControlAction, ...) 

更清潔的設計,你可能會希望MyControlController和MyControlAction成員來到每個Model的接口使用該控件必須實現。然後讓局部視圖採用具有該接口類型的強類型模型。

+0

同意,似乎這增加的可視數據將是最簡單的事情去做。 – Amir 2009-09-18 15:26:48

+0

Craig的答案適用於我,但是如何獲得控制器中的當前網址?如果我打算這樣做的話,我可能會將url從重寫的onactionexecuting方法中存儲到viewdata中,這樣我就不必在每個操作方法中都繼續這樣做。 – 2009-09-18 15:29:53

+0

@Ronnie - 你不需要當前的URL,你只需要當前的控制器和動作 - 當然,當你處於控制器的動作方法中時,你當然會知道這一點:) – 2009-09-18 15:33:35

2

ViewContext.RouteData.Values [「行動」]

或類似的東西就完事了

+0

我不知道在設計時的行動。 – 2009-09-18 15:30:24

+0

抱歉更正了調用,它從用於查找正確操作的routeData獲取操作值。 – AndreasN 2009-09-18 15:32:45

相關問題