【问题标题】:MVC Form Submit Button will Conditionally have OnClick EventMVC 表单提交按钮将有条件地具有 OnClick 事件
【发布时间】:2013-12-31 00:46:07
【问题描述】:

从 .cshtml 发布表单。如果电子邮件文本框的值为“Admin”,而密码文本框的值为“12345”,我想在提交按钮上包含一个 onclick 事件。

我考虑过 if/else 块,但是在 if 条件下你看到问号 (?) 的地方应该放置什么:

<form class="fvalidate" action="/entry" method="post">
     <input type="text" name="Email" class="email required"/>
     <input type="password" name="Sifre" class="required" />
     @if (?)
     {
          <input type="submit" value="LOG IN" class="mTop15" 
          onclick="ibFunc.openBoxOpen('/entry/adv'); return false;" /> 
     }
     else
     {
         <input type="submit" value="LOG IN" class="mTop15" /> 
     }
</form>

我怎样才能做到这一点?

【问题讨论】:

  • @if 是 Razor 代码,因此当表单在页面上呈现时它会在服务器上运行:您最终可以检查 Model 属性,如果... 如果您想检查用户输入的值(因为您说“发布”),那么控制器中也必须发生一些事情。你到底想做什么?
  • 表单被发布到“entry”控制器下名为“index”的ActionMethod。如果“admin”登录,我想将表单发布到同一控制器下另一个名为 adv 的操作方法并调用“ibFunc.openBoxOpen”javascript 函数。
  • @Roman 除了调用“ibFunc.openBoxOpen()”javascript 函数外,它工作正常。您能否更新一下并回复您的答案?
  • 我想最好在你的操作中创建逻辑。
  • 好的,但是如何调用“ibFunc.openBoxOpen()”js函数

标签: asp.net-mvc razor model-view-controller onclick


【解决方案1】:

在控制器中的 POST 中进行控制,当“管理员”提交表单时,使用 if 然后使用

return RedirectToAction("adv", "entry");

【讨论】:

  • 那么如何调用“ibFunc.openBoxOpen()”js函数呢?
  • 你会在动作 adv 的 GET 上调用函数 js
  • 那个函数有什么作用?您需要区分客户端(javascript)和服务器端(asp.net mvc)。当您发布表单时,您会将数据发送到服务器,在那里将对其进行验证,然后将其发送到其他地方。当您到达新页面时,如果您需要运行一些脚本,您需要确定您希望如何执行此操作。
  • 该函数会创建一个包含页面的弹出窗口,否则将正常显示。
【解决方案2】:

您需要了解应用程序的流程以及何时触发。您似乎在混合使用客户端和服务器端技术。

流程应该是

  • 步骤 1 提交表格
  • 第 2 步控制器验证登录并确定他们是否是管理员。
  • 第 3 步控制器根据用户是否为管理员将用户重定向到 /entry/entry/adv 页面
  • 第 4 步在 /entry 页面上不要触发 javascript
  • 步骤 4a 在/entry/adv 页面上触发 javascript

直接回答您的问题。没有什么可以代替 ? 来做你想做的事情,因为这是在用户与页面交互之前在服务器上执行的 Razor 代码。

【讨论】:

  • 如果文本框中的电子邮件是“Admin@mycompany.com”,我提到的一切都会发生。上面那是什么管理员的东西?
  • 您似乎正在尝试使用 Razor 代码来更改页面的去向,但在页面加载时您不知道谁将登录,因此您无法使用 Razor (服务器端代码)来改变页面的行为。您可以使用 javascript,但这可能不是很安全。我建议您使用@theLaw 建议的解决方案,并在您验证用户并知道他们是谁后重定向到不同的页面。
  • 是的,但是@theLaw 告诉我从 action 方法中调用 js 函数。你能举个例子吗?我不知道如何
  • 重写了我的答案,这应该会有所帮助。请不要叫我汤米。
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2018-01-09
  • 2010-09-18
  • 2021-10-18
  • 2017-08-21
  • 2019-01-03
  • 2015-08-19
相关资源
最近更新 更多