我正在尝试使用btnCreate_OnClick事件将表单重置为默认值,就像第一个page_load一样。问题是在PostBack,每个文本框和其他控件之后重新加载ViewState值。由于DropDownList选择上的服务器事件,我无法停用viewstate。到目前为止我找到的唯一方法是在click事件之后重定向到self,但这会加载页面两次,因此是一个糟糕的解决方案。我尝试了ViewState.Clear()并更新了UpdatePanel,但没有成功。
我可以为所有控件做一个循环并设置txtXXXXX.Text ==“”,但我很确定这不是最好的主意。
像Page.Reset()这样的东西本来就很完美,但它不存在。
对我这个问题的任何想法?
由于
答案 0 :(得分:12)
如果可行,我通常只使用Response.Redirect从头开始重新加载同一页面。
对页面的初始GET请求通常比后续的POST花费更少,因此没有太多理由可以避免它。
答案 1 :(得分:6)
我们可以只用2行代码重置ASP.NET表单页面
protected void Button_Reset_Click(object sender, EventArgs e)
{
Session["ViewState"] = null;
Response.Redirect("/Roster/DRAC/Create.aspx");
}
答案 2 :(得分:2)
由于viewstate,自动重定向变得棘手。
按钮有一个html输入类型“reset”,但我不确定为什么或者任何集成msft已经放入viewstate / asp.net。它通常适用于简单的JavaScript表单。
例如:
<input type="button" value="Reset" onclick="document.<formId>.reset();">
来自google ---- ^
答案 3 :(得分:0)
一种方式,不一定理想,是使用Javascript将值重置为默认值。如果它是一个大的形式,它可能是丑陋的,但将阻止需要进行自我重定向。
您也可以尝试使用Server.Transfer而不是Response.Redirect(/ self /)
答案 4 :(得分:0)
我不知道这是否有帮助,但我在提交表单之前使用javascript更改表单上我想获取新值的每个输入的名称,因为.net页面无法再匹配表单中的值页面的控件重新加载它们就好像没有回发一样。我还在表单中添加了一个新值,以便我知道哪个按钮提交了表单,并使用该逻辑来决定加载到所有控件中的内容以及如何处理表单数据。
$("#Bset").children().click(function() { //all the btns click function
$.each($("form").find("input"), function(e,v) { //could filter this to subset of inputs
$(v).attr("name", "_" + $(v).attr("name")); // ctrl1 becomes _cntrl1
});
$("form").append("<input type='hidden' id='b' name='b' value='" + $(this).text() + "' />").submit();
});
然后在
背后的代码中protected void Page_Init(object sender, EventArgs e)
{
id = int.Parse(Request.QueryString["id"]);
bk = db.dc.getDetailBK(id).Single();
if (Request.Form.Count > 0)
doPostBack();
mrl = (from a in db.dc.getMetricQTD(id, null, null, loadSavedGoals) select a).ToList();
}
然后我可以在处理表单数据的dopostback中执行操作,与db等交互,这可能会更改mrl加载的值,并刷新与mrl绑定的输入中的数据,无论它们是否被修改或不在形式。
另一种选择是绑定一些按钮来使用web服务来处理你的数据库交互,然后调用window.location来刷新页面。
$。AJAX({
url:“webservice / dbfunction?”
数据:{按btn,某些形式值等...}
成功:function(){window.location(“samepage.aspx?id = xxx”);}
...
});
这也可以避免在服务器端响应重定向。
答案 5 :(得分:-3)
在我们的案例中,最佳性能解决方案是为每个控件手动设置click事件中的默认值ex:
textbox1.Text = null;
textbox2.Text = null;
这避免了double page_load和循环。我们没有事件必须更新UpdatePanel,因为它在渲染之前执行。
也许在更复杂的Web应用程序中,我们必须重定向,因为大多数人似乎都接受这个作为解决方案。
设置每个控件的默认值更适合我们的情况。
谢谢