将表单方法设置为不指定控制器和操作

时间:2011-07-12 07:12:47

标签: asp.net-mvc-3 razor

我有一个部分视图,我需要重复使用:

div class="selectDate">
@using (Html.BeginForm("ViewTransactionLog", "Profile", FormMethod.Get))
{
    <div class="selectDateLabel">Date:</div>
    <div>
    @Html.TextBox("start", range.Start, new { @class = "pickDate" }) to @Html.TextBox("end", range.End, new { @class = "pickDate" })

    </div>
    <div>
    <input type="submit" value="Go" />
    </div>
}
</div>

这是挑选2个日期的代码。由于数据是轻量级的,我希望通过Get方法传递它。我也希望将其概括并将其放入自己的cshtml中;但是,Html.BeginForm期望在我希望使用Get方法时给出控制器名称和操作名称。反正是为了避免这种情况,所以我可以将代码移动到自己的部分视图中吗?

1 个答案:

答案 0 :(得分:4)

假设您希望表单回发到当前控制器和操作,您应该能够使用扩展方法:

public static MvcForm BeginForm<TModel>(
    this HtmlHelper<TModel> html, 
    FormMethod formMethod)
{
    string controller = (string)html.ViewContext.RouteData.Values["controller"];
    string action = (string)html.ViewContext.RouteData.Values["action"];

    return html.BeginForm(action, controller, formMethod);
}