按钮未在多个模型视图上调用Action

时间:2013-06-07 14:29:15

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

有人能用这段代码发现问题吗?

查看:

@model Tuple<LoginModel, RegisterModel>

<h2>Index</h2>

@using (Html.BeginForm("Login", "Login", FormMethod.Post))
{
    @Html.TextBoxFor(tuple => tuple.Item1.User, new { @Name = "User" })         
    @Html.PasswordFor(tuple => tuple.Item1.Password, new { @Name = "Password" })

    <button type="submit" name="Login">Connect</button>
}

@using .... Other actions.....

Controller:

    [Authorize]
    public class LoginController : Controller
    {
        //
        // GET: /Login
        [AllowAnonymous]
        public ActionResult Index(string returnUrl)
        {
            return View();
        }

        //
        // POST: /Login
        [HttpPost]
        [AllowAnonymous]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
              .
              .
        }

Login方法没有被调用,我很难找到原因。如果我将操作重命名为Index,则会调用它... 谁能在这里发现问题?

我很感激任何反馈。

此致 法比奥

修改:这似乎是一个权限问题。即使Login方法包含AllowAnonymous属性,仍然不允许调用它。如果我首先执行登录然后尝试触发操作,它会起作用。现在,如何确保未经身份验证的用户允许此操作?尝试添加root web.config文件的路径并添加一个web.config文件,授权每个Login文件夹。没有工作。

再次感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

好的,我设法通过从root web.config中删除授权元素来解决问题:

<authorization>
   <deny users="?"/>
</authorization>

我仍然不清楚这个设置如何与MVC架构冲突。我使用了这个,所以资源应该明确授权给公众(不限于行动和观点)。

奇怪的是,一个动作被允许而不是另一个动作的奇怪行为。

我肯定会适应其他类型资源的MVC方式。我希望这可以与MVC一起使用。

感谢大家花时间研究这个问题。我很感激。

我希望这有助于其他人。

答案 1 :(得分:-1)

您没有在POST中包含returnUrl参数

编辑:

您正在更改Razor中的输入名称。这可能会使ModelBinder感到困惑,因此它不会创建LoginModel。