Asp.net mvc MVC从div弹出窗口提交
我对MVC开发相当陌生 我有一个名为“Usercontroller”的控制器来管理登录、忘记密码和注册。 我已经添加了HttpGet、HttpPost方法来登录。HttpPost SignIn方法是带有“Model.User”的SignIn函数的重载。 我也有一个“忘记密码”的方法。(发送电子邮件) 忘记密码是一个div弹出窗口,具有“发送链接”功能。 如果我点击“发送链接”,它也会点击用户控制器中的“登录”方法。Asp.net mvc MVC从div弹出窗口提交,asp.net-mvc,authentication,Asp.net Mvc,Authentication,我对MVC开发相当陌生 我有一个名为“Usercontroller”的控制器来管理登录、忘记密码和注册。 我已经添加了HttpGet、HttpPost方法来登录。HttpPost SignIn方法是带有“Model.User”的SignIn函数的重载。 我也有一个“忘记密码”的方法。(发送电子邮件) 忘记密码是一个div弹出窗口,具有“发送链接”功能。 如果我点击“发送链接”,它也会点击用户控制器中的“登录”方法。 需要识别这个并调用“忘记密码”方法。我该怎么做?还是有更好的方法来实现忘记密码?
需要识别这个并调用“忘记密码”方法。我该怎么做?还是有更好的方法来实现忘记密码?在
UserController
中创建一个名为AuthenticateUser()的私有方法
然后,登录和放弃密码操作将调用AuthenticateUser()
,然后再执行其余逻辑在UserController
中创建一个名为AuthenticateUser()的私有方法
然后,登录和放弃密码操作将在执行其余逻辑之前调用AuthenticateUser()
如果您在点击“/User/ForgotPassword”url时一直被重定向到sign()操作,那么放弃密码操作很可能是在请求身份验证,并且由于用户未经身份验证,它会将它们重定向到登录页面
尝试将以下内容添加到web.config中:
<location path="User/ForgotPassword">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
您可以将其放在“system.web”节点的结束标记下方,例如:
<system.web>
<authentication mode="Forms">
<forms name="YourCookieName" loginUrl="/User/SignIn" path="/" domain="" timeout="40320" slidingExpiration="true"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<!-- the rest of your system.web config in here -->
</system.web>
<location path="User/ForgotPassword">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
虽然,这只是猜测您的问题所在。如果您在点击“/User/ForgotPassword”url时一直被重定向到SignIn()操作,那么ForgotPassword操作很可能是请求身份验证,并且由于用户未经身份验证,它会将他们重定向到登录页面
尝试将以下内容添加到web.config中:
<location path="User/ForgotPassword">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
您可以将其放在“system.web”节点的结束标记下方,例如:
<system.web>
<authentication mode="Forms">
<forms name="YourCookieName" loginUrl="/User/SignIn" path="/" domain="" timeout="40320" slidingExpiration="true"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<!-- the rest of your system.web config in here -->
</system.web>
<location path="User/ForgotPassword">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
虽然,这只是猜测您的问题可能是什么。我想您想知道,按下了哪个按钮,下面的代码为您提供了此问题的解决方案:
给按钮起相同的名字
查看:
<input type="submit" id="btn1" name="btnSubmit" value="Login" />
<input type="submit" id="btn2" name="btnSubmit" value="Forgot Password" />
[HttpPost]
public ActionResult ReturnFunction(Model model, string btnSubmit)
{
switch (btnSubmit) {
case "Login":
//Code for checking credentials here
break;
case "Forgot Password":
//Code retrieving password here
break;
}
switch语句处理按钮值,因此您可以判断单击了哪个按钮。我想您想知道,哪个按钮被按下,以下代码为您提供了此问题的解决方案:
给按钮起相同的名字
查看:
<input type="submit" id="btn1" name="btnSubmit" value="Login" />
<input type="submit" id="btn2" name="btnSubmit" value="Forgot Password" />
[HttpPost]
public ActionResult ReturnFunction(Model model, string btnSubmit)
{
switch (btnSubmit) {
case "Login":
//Code for checking credentials here
break;
case "Forgot Password":
//Code retrieving password here
break;
}
switch语句处理按钮值,因此您可以判断单击了哪个按钮。我们为所有页面采用了一种解决方案,该解决方案要求每个表单有多个提交按钮,适用于您的情况(已在登录和其他senarios中使用)。我在这里概述了它以及一个代码示例:
在您的情况下,由于您使用的是弹出窗口,您可能需要使用javascript使弹出按钮调用原始表单中包含的隐藏提交按钮,具体取决于您打开对话框的方式。我们为所有页面采用了一种解决方案,该解决方案要求每个表单具有多个提交按钮,这在您的情况下适用(在登录和其他senarios中都使用了它)。我在这里概述了它以及一个代码示例:
在您的情况下,由于您使用的是弹出窗口,您可能需要使用javascript使弹出按钮调用原始表单中包含的隐藏提交按钮,具体取决于您打开对话框的方式。您可以在此处输入“忘记密码”屏幕截图(或HTML代码)吗?您可以输入“忘记密码”屏幕截图(或HTML代码)吗这里?如何区分此呼叫是来自“登录提交”还是“忘记密码提交”?@Dhanuka777看看我的答案,为了区分哪个按钮被点击了。@Dhanuka777-Max的答案会起作用,我以为你在发送登录按钮到登录操作,而忘记了密码按钮放弃了密码操作,保持这些操作分开,但共享相同的身份验证功能。我会这样做的无论如何,我如何区分此呼叫是来自“登录提交”还是“忘记密码提交”?@Dhanuka777看看我的答案,为了区分哪个按钮被点击了。@Dhanuka777-Max的答案会起作用,我以为你在发送登录按钮到登录操作,而忘记了密码按钮放弃了密码操作,保持这些操作分开,但共享相同的身份验证功能。我会这样做的无论如何