【问题标题】:MVC submit from a div pop up从 div 弹出的 MVC 提交
【发布时间】:2013-12-06 07:04:50
【问题描述】:

我对 MVC 开发相当陌生。

我有一个名为“Usercontroller”的控制器来管理登录、忘记密码和注册。 我在 SignIn 中添加了 HttpGet、HttpPost 方法。 HttpPost SignIn 方法是带有“Model.User”的 SignIn 函数的重载。 我也有一个“忘记密码”的方法。 (发送电子邮件)。

忘记密码是一个 div 弹出窗口,具有“发送链接”功能。 如果我点击“发送链接”,它也会点击用户控制器中的“登录”方法。 需要识别并调用“忘记密码”方法。我怎样才能做到这一点?或者有没有更好的方法来实现忘记密码?

【问题讨论】:

  • 你能把“忘记密码”截图(或HTML代码)放在这里吗?

标签: asp.net-mvc authentication


【解决方案1】:

我想你想知道,哪个按钮被按下了,下面的代码给你解决了这个问题:

给按钮起相同的名字

查看:

 <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 语句处理按钮值,因此您可以知道哪个按钮被点击了。

【讨论】:

    【解决方案2】:

    UserController 中创建一个名为AuthenticateUser() 的私有方法

    然后 logIn 和 ForgotPassword Actions 将在执行其余逻辑之前调用 AuthenticateUser()

    【讨论】:

    • 如何区分这个调用是来自“登录提交”还是“忘记密码提交”?
    • @Dhanuka777 看看我的回答,区分哪个按钮被点击了。
    • @Dhanuka777 - Max 的回答会起作用,我以为您将登录按钮发送到登录操作,将忘记密码按钮发送到 ForgotPasswordAction,保持这些操作分开,但共享相同的身份验证功能。无论如何我都会这样做。
    【解决方案3】:

    如果您在点击“/User/ForgotPassword”网址时不断被重定向到 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>
    

    不过,这只是对您的问题的猜测。

    【讨论】:

      【解决方案4】:

      我们已经为每个表单需要多个提交按钮的所有页面采用了一种解决方案,该解决方案适用于您的情况(已在登录和其他场景中使用过)。我已经在这里概述了它以及一个代码示例:

      How to use ajax link instead of submit button for form?

      在您的情况下,由于您使用的是弹出窗口,因此您可能必须使用 javascript 让弹出按钮调用原始表单中包含的隐藏提交按钮,具体取决于您打开对话框的方式。

      【讨论】:

        猜你喜欢
        • 2017-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        相关资源
        最近更新 更多