Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC调用另一个控制器操作_C#_Asp.net Mvc - Fatal编程技术网

C# MVC调用另一个控制器操作

C# MVC调用另一个控制器操作,c#,asp.net-mvc,C#,Asp.net Mvc,我启动了一个MVC项目,它为我创建了AccountController类。 因此,要登录到我当前的站点,我必须转到localhost:2500\Account.mvc\LogOn 我想在索引视图中登录我的HomeController。所以基本上,如果你去我的根网站,如果没有认证,你将不得不登录到任何其他地方 所以我所做的就是将表单添加到我的索引视图中,并尝试将其发布到我的 调用登录操作的帐户视图 我已经调用了BeginForm方法,将我的操作和相应的视图(登录、帐户)传递给它。当我单击按钮时,它

我启动了一个MVC项目,它为我创建了AccountController类。 因此,要登录到我当前的站点,我必须转到localhost:2500\Account.mvc\LogOn

我想在索引视图中登录我的HomeController。所以基本上,如果你去我的根网站,如果没有认证,你将不得不登录到任何其他地方

所以我所做的就是将表单添加到我的索引视图中,并尝试将其发布到我的 调用登录操作的帐户视图

我已经调用了BeginForm方法,将我的操作和相应的视图(登录、帐户)传递给它。当我单击按钮时,它不会发布到帐户视图,因此不会执行登录操作。相反,它只是发布到主视图,再次调用索引操作。所以这对我来说真的没什么用。。。哈哈

不知道我做错了什么。下面是我在Home/Index.aspx中的原始表单代码,在点击登录按钮之前,我还将在其呈现后向您显示源代码

以下是我在Home/Index.aspx中的代码:

  <% using (Html.BeginForm("LogOn", "Account")) { %>
            <div>
                <fieldset>
                    <legend>Account Information</legend>
                    <p>
                        <label for="username">Username:</label>
                        <%= Html.TextBox("username") %>
                        <%= Html.ValidationMessage("username") %>
                    </p>
                    <p>
                        <label for="password">Password:</label>
                        <%= Html.Password("password") %>
                        <%= Html.ValidationMessage("password") %>
                    </p>
                    <p>
                        <%= Html.CheckBox("rememberMe") %> <label class="inline" for="rememberMe">Remember me?</label>
                    </p>
                    <p>
                        <input type="submit" value="Log On" />
                    </p>
                </fieldset>
            </div>
        <% } %>

您能否确认/Account.mvc/LogOn是有效的路由

检查事项:

  • 这条路线有效吗

  • 登录操作上是否有ActionVerb,以防止post请求-例如: [动作动词(HttpVerbs.Get)]

编辑: 查看代码时,忽略断点所在的事实。被重定向到主页,因为你没有传递returnUrl,当它成功的时候,它不会把你送回主页吗

把这个放在你的主页上。它的回报是什么

<%=Request.IsAuthenticated %>

编辑2:

显然,这个返回值是假的

好的。。。所以控制器正常,视图看起来正常,并且正在呈现正确的url。。。我假设ASP.NET MVC已安装并位于GAC中,因为您还可以浏览到其他URL,如直接登录。考虑到路径中的“.mvc”,看起来您正在Windows XP上运行它


你的路线是什么样的?您对它们做了任何更改吗?

您是否尝试在操作开始时不使用斜杠?@mrinject如果MVC使用斜杠呈现路线,您当然希望它是正确的?是的,MVC在这里呈现了此html,因为我使用的是带参数的BeginForm()。如果我将登录方法设置为静态,它会给我大量错误。此AccountController由MVC生成。这是标准的开箱即用的登录身份验证……是的,没关系。我的错。是的,这是一条有效的路线。我可以直接在浏览器中找到它。。。localhost:2500\Account.mvc\logon是否也接受GET请求?邮局呢?上面有ActionVerb吗?是的,登录操作有ActionVerb。我将在上面发布该操作以供参考。但是您提到您可以浏览到它。看看这个动作,如果你明白我的意思的话,我不知道你怎么能浏览到这个页面?这是由MVC生成的开箱即用的auth。因此,在帐户视图中,我有ChangePassword.aspx、ChangePAsswordSuccess.aspx、LogOn.aspx和Register.aspx。我只是想使用LogOn()逻辑,所以我不必在我的家庭控制器中编写一个全新的逻辑。。。
[AcceptVerbs(HttpVerbs.Post)]
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings",
            Justification = "Needs to take same parameter type as Controller.Redirect()")]
        public virtual ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl)
        {

            if (!ValidateLogOn(userName, password))
            {
                return View();
            }

            FormsAuth.SignIn(userName, rememberMe);
            if (!String.IsNullOrEmpty(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
<%=Request.IsAuthenticated %>