我可以循环遍历所有控件,并将txtXXXXX.Text设置为"",但我相当确定这不是最好的想法。
类似于Page.Reset()的东西就完美了,但它并不存在。
对于我的这个问题,有什么想法吗?
谢谢
protected void Button_Reset_Click(object sender, EventArgs e)
{
Session["ViewState"] = null;
Response.Redirect("/Roster/DRAC/Create.aspx");
}
自动重定向由于视图状态而变得棘手。
有一个用于按钮的HTML输入类型“reset”,但我不确定微软是否已将其集成到ViewState/ASP.NET中。它通常适用于简单的JavaScript表单。
例如:
<input type="button" value="Reset" onclick="document.<formId>.reset();">
来自Google ----^
一种方法,不一定理想,是使用Javascript将值重置为它们的默认值。如果表单很大,这可能会很丑陋,但可以避免需要进行自我重定向。
您还可以尝试使用Server.Transfer而不是Response.Redirect(/self/)
我不知道这是否有帮助,但在提交表单之前,我使用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中执行一些操作,处理表单数据,与数据库交互等等。这可能会改变mrl加载的值,并刷新与mrl相关联的输入框中的数据,无论它们是否在表单上被修改过。
另一种选择是将一些按钮绑定到使用webservice来处理数据库交互,然后调用window.location来刷新页面。
$.ajax({
url: "webservice/dbfunction?"
data: {点击的按钮,一些表单值等等...}
success: function() {window.location("samepage.aspx?id=xxx");}
...
});
这样也避免了在服务器端进行响应重定向。
textbox1.Text = null;
textbox2.Text = null;
这样可以避免双重页面加载和循环。我们甚至不必更新UpdatePanel,因为它在渲染之前执行。
也许在更复杂的Web应用程序中,我们需要重定向,因为大多数人似乎接受这种解决方案。
针对每个控件设置默认值更适合我们的情况。
谢谢