【问题标题】:ASP.NET MVC: Submit renders the same pageASP.NET MVC:提交呈现相同的页面
【发布时间】:2009-07-14 10:25:23
【问题描述】:

我正在尝试向 ASP.NET MVC 应用程序添加简单的登录页面。我实际上使用 Sharp Arch 模板项目。因此,我在 UsersController 中添加了 3 个方法 Login()、Logout() 和 DoLogin(),其中 Login() 只是返回 View("Login");

现在,当我导航到 /Users/Login 时,我的 aspx 显示为带有提交按钮:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" Inherits="System.Web.Mvc.ViewPage" Title="Login" %>
<%@ Import Namespace="Orders.Web.Controllers" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
<h2>Login</h2>
    <% if (ViewContext.TempData["message"] != null){ %>
        <p><%= ViewContext.TempData["message"]%></p>
    <% } %>
    <% using (Html.BeginForm<UsersController>(u => u.DoLogin()))
       { %>
            <div><% =Html.SubmitButton("submit") %></div>
    <% } %>
</asp:Content>

但是,当我单击提交时,再次向 Login() 发出请求 - 我在那里设置断点时可以看到它,即使在生成的 HTML 页面表单中它也不会尝试转到 UsersController.DoLogin()有动作 /Users/DoLogin。当我在浏览器中手动输入 /Users/DoLogin 时,它会被调用并触发我的断点。

我已经头疼了几个小时了……我看不出这里有什么问题。

【问题讨论】:

  • 你能发布生成的 HTML 吗?即,渲染页面和“查看源代码”
  • 嗯,非常感谢 ;-) 我确实检查了当时的来源,但是当我开始美化它以发布时,我发现了这个:
    然后我在我的 site.master:
    似乎当我在 VS2008 编辑器中打开 .master 并尝试添加菜单时,它添加了一个 ASP.NET 表单......它包装了我的 MVC 表单和挡道了。删除这个额外的表单解决了这个问题。

标签: asp.net-mvc


【解决方案1】:

一定是路由问题。可以贴一下你的路由吗,也可以试试this路由调试器

【讨论】:

  • 好的,我尝试了调试器,/Users/Login 和 /Users/DoLogin 都路由到适当的控制器/操作...实际上 /Users/Login 和 /Users/DoLogin 在输入时都按预期工作浏览器中的网址。这是提交按钮似乎无法正常工作...
【解决方案2】:

好的,多亏了 jamesshannon,我发现这是因为我的 site.master 页面突然将所有内容都包装到了 ASP.NET 表单中——可能是因为我使用 VS2008 编辑器对其进行了编辑。不确定这样的行为是否非常好,但是......现在我知道了。

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 2010-10-29
    • 1970-01-01
    • 2011-03-21
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多