ASP.NET MVC - 如何从局部视图中获取当前操作?

时间:2009-09-18 15:09:40

标签: .net asp.net-mvc

我有一个部分视图,由几个操作方法返回的几个视图呈现。

部分视图的形式应该回发给被调用的操作方法。

我的理解是,如果我只是致电

<% Html.BeginForm(); %>

从视图中,表单的action属性将指向被调用的action方法。 我不能这样做,因为我需要为javascript目的设置表单的ID属性。 Html.BeginForm的重载让我设置html属性也需要一个显式的控制器和动作。因此,我可以将表单元素写成:

,而不是使用Html帮助器
<form action="<%=(NEED TO SOMEHOW GET THE URL TO THE CURRENT ACTION) %>" method="post" id="myForm">

我只是不确定如何获取网址。

3 个答案:

答案 0 :(得分:15)

只需为控制器和操作传递null。正确的值将被替换。 E.g:

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

答案 1 :(得分:2)

ViewContext.RouteData.Values [ “行动”]

或者类似的东西可以完成工作

答案 2 :(得分:0)

在这种情况下,我可能只是让控制器(或父视图)在模型/ 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必须实现的接口。然后让局部视图采用具有该接口类型的强类型模型。