我们正在尝试动态修改母版页中主ASP.NET表单的Action属性。
该页面有一个单选按钮,用户选择其中一个选项并点击提交,在回发时,根据选择应该设置表单的操作属性,并且应该自动再次提交表单。
我们试图使用JavaScript。
document.forms[0].action = "option1.aspx";
document.forms[0].submit();
但这似乎不起作用,对action属性没有影响。
如果我们不使用母版页,可以使用
轻松实现this.Form.Action = "option1.aspx";
ClientScript.RegisterStartupScript(this.GetType(),"test1",
"document.form[0].submit();",true);
可悲的是,我们无法移除母版页..关于如何实现这一点的任何指示......?
答案 0 :(得分:4)
这是我读过的,他们希望他们没有做过。 Form标记将其action属性硬编码。您必须使用控制适配器才能在运行时控制其构造。我特别为URL重写使用它,当我要求回发URL是我创建的重写URL。 Scott Gu为它制作了代码,你可以在这里找到它:
http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule1.zip
该文章的地址:
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
答案 1 :(得分:0)
表单是否需要将值传递给结果页面?如果没有,为什么不直接使用Response.Redirect到正确的页面?例如,假设您正在使用名为 lstOptions 的RadioButtonList:
protected void btnSubmit_Click(object sender, EventArgs ags) {
switch (lstOptions.SelectedValue) {
case "option1":
Response.Redirect("~/option1.apsx");
break;
//etc
}
}
如果您必须传递值,为什么甚至会触发回帖?听起来你可以通过使用javascript来完成你想要的东西。例如,假设您的表单名为 form1 ,而单选按钮的名称为 options :
<input type="submit" value="Submit" onclick="javascript:submitForm()" />
<script type="text/javascript">
function submitForm() {
for (var i=0; i < document.form1.options.length; i++) {
if (document.form1.options[i].checked) {
document.forms[0].action = "option" + i + ".aspx";
document.forms[0].submit();
}
}
}
</script>