我知道也许标题听起来有点不可思议,但我相信,我的问题是确实怪异。我有一个使用Razor视图引擎的ASP.NET MVC 4应用程序(这是我的第一个MVC真实应用程序)。查看表格上回发呼吁所有控制器与[HttpPost]动作来自不同控制器的
我在那里我呈现两个部分的观点是这样的布置图:
<!-- Login -->
@Html.Action("RenderLoginPopup", "Login")
<!-- Registration -->
@Html.Action("RenderRegisterPopup", "Login")
每个从登录控制这些行动只是呈现局部视图:
[ChildActionOnly]
public ActionResult RenderLoginPopup()
{
return PartialView("Partial/_LoginPopupPartial");
}
只是为了例证清单(两者都以相同方式构建),登录部分视图包含像这样的ajax表单:
@using (Ajax.BeginForm("Login", "Login", new AjaxOptions()
{
HttpMethod = "POST",
OnSuccess = "loginResponseReceived"
}, new { @id = "loginForm" }))
从登录控制器(形式的目标)的登录动作具有以下属性签署(值得一提的,并注意HttpPost一个):
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public JsonResult Login(LoginModel model)
{ }
到目前为止,一切都很好...一切正常完美 - 登录和注册操作都没有任何问题。
,我希望有一个@ Html.BeginForm()在与主要布局一起加载,以便谈论节目-,当我有这个问题。举例来说,如果我有一个纯洁和简单的形式是这样的:
@using (Html.BeginForm())
{
<input type="hidden" name="name"/>
<input type="submit" value="Send"/>
}
与控制器CaptionExtendedController一起:
[HttpPost]
public ActionResult Index(string nume)
{
return View();
}
因此,在年底,我最终生成的HTML文件,我将有3个表单 - 2用于登录和注册(ajax)以及从最后一个视图生成的一个简单表单。请记住,所有三种形式都是独立的(也就是说它们不是一个)。
问题是,每次我按下从最后一个窗体的按钮“发送”时,我的视图中的[HttpPost]属性签名的所有控制器(Login,RegisterController和CaptionExtendedController中的Index)被调用。
WHY ???为了有一个临时修复,我已经从登录和注册操作中删除了[HttpPost]属性,现在它正在工作,但我认为这不正确。
请问有人能解释我为什么会发生这种情况,并最终指出我解决这个问题的正确方向?
预先感谢您。
我会为每个表单分配一个ID并像jQuery一样处理它们[here](http://stackoverflow.com/a/5410121/956051) – Lars
前2个已经通过jQuery通过Ajax.BeginForm创建,但是我需要有第三个是正常的形式。另外,如果我这样做,这将意味着从现在开始,我的网站上的所有表单都应该使用Ajax.BeginForm或jquery完成,对吗?这听起来不像现在的选择。感谢您的时间。 – Edi