C# MVC调用另一个控制器操作
我启动了一个MVC项目,它为我创建了AccountController类。 因此,要登录到我当前的站点,我必须转到localhost:2500\Account.mvc\LogOn 我想在索引视图中登录我的HomeController。所以基本上,如果你去我的根网站,如果没有认证,你将不得不登录到任何其他地方 所以我所做的就是将表单添加到我的索引视图中,并尝试将其发布到我的 调用登录操作的帐户视图 我已经调用了BeginForm方法,将我的操作和相应的视图(登录、帐户)传递给它。当我单击按钮时,它不会发布到帐户视图,因此不会执行登录操作。相反,它只是发布到主视图,再次调用索引操作。所以这对我来说真的没什么用。。。哈哈 不知道我做错了什么。下面是我在Home/Index.aspx中的原始表单代码,在点击登录按钮之前,我还将在其呈现后向您显示源代码 以下是我在Home/Index.aspx中的代码:C# MVC调用另一个控制器操作,c#,asp.net-mvc,C#,Asp.net Mvc,我启动了一个MVC项目,它为我创建了AccountController类。 因此,要登录到我当前的站点,我必须转到localhost:2500\Account.mvc\LogOn 我想在索引视图中登录我的HomeController。所以基本上,如果你去我的根网站,如果没有认证,你将不得不登录到任何其他地方 所以我所做的就是将表单添加到我的索引视图中,并尝试将其发布到我的 调用登录操作的帐户视图 我已经调用了BeginForm方法,将我的操作和相应的视图(登录、帐户)传递给它。当我单击按钮时,它
<% 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)]
<%=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 %>