【问题标题】:MVC4 Ajax Form URLMVC4 Ajax 表单 URL
【发布时间】:2014-03-01 14:21:41
【问题描述】:

有没有办法为 AJAX 表单设置 URL?我正在寻找使用 Ajax.BeginForm() 语法的答案,这样我就可以利用微软的模型构建魔法,而无需自己重新解析 url 字符串。

foo.com.au/getFoo 上有一个部分视图,其中包含一个 ajax 表单。 ajax 表单将发布到Foo 控制器(默认),getFoo 操作。

当我从外部站点 (bar.com.au) 调用它时,我希望它回发到 foo.com.au/getFoo。相反,它发布到bar.com.au/getFoo。有没有办法告诉 Ajax 表单发布到完整的 URL 而不仅仅是相对路径?

动机
对于那些怀疑 hax0rz 或其他犯规行为的人,我已经构建了一个小部件,该小部件正在集成到多个客户端站点。我现在正在为这个小部件构建一个身份验证插件。该小部件不会将它们重定向到我的网站进行身份验证,因此我希望它使用用户名/密码输入表单的结果回发到我的域。

【问题讨论】:

  • “外部站点”是什么意思?
  • 我认为它是一个不属于原始域的站点
  • 外部站点意味着我无法控制或了解其 URL,也无法访问其资源。
  • 为所有关注互联网的公民添加了动机
  • 我很困惑。这是我的想法。我在域A。我想将表单发布到位于域 B 中的操作方法,并且表单在域 A 中。首先请确认我的理解,我们如何将表单发布到域 B?

标签: asp.net-mvc-4 asp.net-mvc asp.net-mvc-4


【解决方案1】:

您需要通过 Ajax-options 传递它,而不是在 BeginForm 的重载中提供它:

@using (Ajax.BeginForm(
    new AjaxOptions
    {
        Url = Url.Action("getFoo", "Foo", null, Request.Url.Scheme)
    }))
{
    ...
}

【讨论】:

  • 这个答案很完美。对于任何想要这样做的人,请记住您需要将 access-control-allow-origin 标头设置为 "*" 以便跨域 JS 仍然可以工作
  • @Kenneth:我很困惑。这是我的想法。我在域A。我想将表单发布到位于域 B 中的操作方法,并且表单在域 A 中。首先请确认我的理解,我们如何将表单发布到域 B?
  • 您需要 CORS,请参阅 @DavidColwell 的第二条评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多