【问题标题】:How to change the form action programatically according to session variable?如何根据会话变量以编程方式更改表单操作?
【发布时间】:2012-02-27 12:36:02
【问题描述】:

如果我有一个 form action 应该根据某些会话变量而有所不同。如何动态更改表单的操作,以便在客户端单击特定链接按钮时,我可以提交具有所需操作的表单。


<form id="myform" action="I wanna to change it dynamically" method="post" > 
    <%-------------%> 
</form>

<script type="text/javascript">
    function submitform()
    {
      document.myform.submit();
    }

</script>

例如:

If session["emp"] = 1 then the action is /A.aspx

If session["emp"] = 2 then the action is /B.aspx

【问题讨论】:

  • 所以基本上你是在问如何评估变量的内容,并根据它改变输出?比如ifwrite 声明?

标签: c# javascript jquery asp.net forms


【解决方案1】:

选项 1

我通常在表单加载时将服务器值放在隐藏字段中,以便我可以在 JavaScript 中与它们交互:

function submitform()
{
    // Get URL that was set server-side for form submission
    var myHiddenObj = document.getElementById("<%= hdnServerValue.ClientID %>");

    // Get form object
    var myFormObj = document.getElementById("myform");

    // Change form action & submit
    myFormObj.action = myHiddenObj.value;
    myHiddenObj.submit();
}

选项 2

如果您只想更改表单操作并且不需要其他客户端处理,只需更改服务器上的表单操作(您需要将runat="server" 添加到您的表单标签):

标记:

<form id="myform" runat="server" action="" method="post" > 
    <%-------------%> 
</form>

C#(或您首选的服务器端语言)

if(Session["emp"].ToString() == "1")
    myform.Action = "A.aspx";
else if (Session["emp"].ToString() == "2")
    myform.Action = "B.aspx";
else
    // Handle neither 1 or 2

【讨论】:

  • 在服务器端。我用url 设置隐藏字段的值?像这样:&lt;asp:HiddenField ID="HDN_path" runat="server" /&gt;HDN_path.Value = "/A.aspx";
  • 写一个服务器变量到客户端,让客户端回传给服务器端评估它。对我来说似乎是一种解决方法? OP 说他基于会话变量做出action 决定。为什么不简单地在action="&lt;%=actionURL%&gt;" 中放一个变量,然后根据会话变量的内容填充该变量服务器端?
  • @CodeCaster,OP询问如何更改他的JS函数中的值 - 我只是假设函数中会有其他逻辑。如果该函数唯一要做的就是提交表单,那么您是正确的。我会相应地更新我的答案。
  • @just_name,我不确定我是否理解您的最后评论。我的解决方案之一对您有用吗?
  • 你的第一条评论很接近 - 除了它没有考虑会话变量。为此,您将需要某种类型的逻辑,例如我的第二个示例。这是在标记中设置它的代码,就像您的第一条评论一样:&lt;asp:HiddenField ID="HDN_path" runat="server" Value="A.aspx" /&gt;
【解决方案2】:

试试这个

如果(条件1) form1.Attributes.Add("action", "My Action1"); 否则如果(条件2) form1.Attributes.Add("action", "My Action2");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2016-04-13
    相关资源
    最近更新 更多