【问题标题】:Sitefinity CMS: Html.BeginFormSitefinity with external URL?Sitefinity CMS:带有外部 URL 的 Html.BeginFormSitefinity?
【发布时间】:2013-12-06 00:50:56
【问题描述】:

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

我在 Google 上搜索了一下,发现有人解释说使用常规的“BeginForm”可以指定一个外部操作 URL:

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

这会产生以下打开表单标签:

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

这很好用,但仍然输出一个常规的 HTML 表单,它不适用于 Sitefinity,因此 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 工作原理有更深入了解的人可以在这里提供一些建议?

【问题讨论】:

  • 如果它只是 BeginFormSitefinity 呈现的内容,那么您为什么不直接“手工”编写 HTML 而不需要任何帮助:&lt;form method="POST" name="defaultForm" action="EXTERNAL_URL"&gt;

标签: asp.net-mvc webforms sitefinity


【解决方案1】:

查看 HybridForm 的来源,它无法修改,因此将考虑action htmlAttribute:http://pastebin.com/5dfQdzs8

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

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 来覆盖 MyHybridForm 中的 GenerateActionUrl()

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多