Sitefinity CMS:带外部URL的Html.BeginFormSitefinity?

时间:2013-12-06 00:50:57

标签: asp.net-mvc webforms sitefinity

我希望有人可以在这里帮助我 - 我正在尝试为Sitefinity设置一个基本的MVC小部件,它将POST到外部URL以在那里记录用户。问题是如果我使用常规HTML来执行此操作,由于WebForms处理表单的方式,窗口小部件将仅在纯MVC模式下工作。

我google了一下,发现人们用常规的“BeginForm”解释说你可以指定一个外部动作网址:

Html.BeginForm(null, null, FormMethod.Post, new { @action="EXTERNAL_URL" })

产生以下开头表格标签:

<form action="EXTERNAL_URL" method="post">

这非常好用,但仍然会输出一个不能与Sitefinity一起使用的常规HTML表单,因此Sitefinity有自己的方法来生成将在混合模式“Html.BeginFormSitefinity”中工作的表单。此方法具有所有相同的覆盖,但行为方式完全不同 - 当我尝试使用此代码时:

Html.BeginFormSitefinity(null, null, FormMethod.Post, new { @action="EXTERNAL_URL" })

这将生成以下开始表单标记:

<form action="/TestProject/TestPage/Index" method="POST" name="defaultForm" action="EXTERNAL_URL">

正如您所看到的,它正在弹出第二个动作属性而不是覆盖动作属性,如默认MVC方法的行为所示。

我希望能更好地了解Sitefinity如何运作的人可以在这里提供一些建议吗?

1 个答案:

答案 0 :(得分:3)

查看HybridForm的来源,无法对其进行修改,因此需要考虑action htmlAttribute:http://pastebin.com/5dfQdzs8

因此,您可以根据此代码创建自己的表单。 你需要html helper:

public static MyHybridForm BeginFormSitefinity(this HtmlHelper htmlHelper, string actionName, string formName, FormMethod method, IDictionary<string, object> htmlAttributes)
{
  return new MyHybridForm(htmlHelper.ViewContext, actionName, formName, method, (object) htmlAttributes);
}

并使用操作htmlAttribute覆盖GenerateActionUrl()中的MyHybridForm