【问题标题】:Make server-side validation without losing data on postback在不丢失回发数据的情况下进行服务器端验证
【发布时间】:2011-10-28 06:49:01
【问题描述】:
我想知道执行此操作的最佳方法是:我有一个使用 ASP 的表单,该表单首先在 客户端 上使用 jQuery 进行验证。在此表单中,我有一个 FileUpload 控件来上传 Excel 文件,并且正在 服务器端 上对该控件进行验证,以检查文件类型、有效数据、有效结构等...我确实需要使服务器端的文件验证尽可能安全,我不想使用 ActiveX。
问题是,当服务器端验证返回错误时,之前在表单中插入的数据会因为回发而丢失。
有没有办法进行客户端验证,然后在完成后进行服务器端验证并且在回发时不会丢失发送的数据?
【问题讨论】:
标签:
c#
jquery
asp.net
validation
file-upload
【解决方案1】:
我认为最好的方法是在 Page_Load 获取字段的旧值。
您所要做的就是检查页面是否回发。
if (Page.IsPostBack)
{
YourTextBox.Attributes.Add("Value", YourTextBox.Text);
}
希望对您有所帮助。
【解决方案2】:
尝试向您的表单添加一个 CustomValidator,它将调用 FileUpload.SaveAs() 方法并验证上传的文件。
例如:
protected void ValidateCstm_ServerValidate(object source, ServerValidateEventArgs args)
{
//Upload the file
fileUpload1.SaveAs(....
.....
.....
//Validate the fileUpload
.....
//If the fileUpload is invalid
args.IsValid = false;
}
我希望这会有所帮助。
【解决方案3】:
您是否考虑过使用 AJAX 进行文件验证,从而完全避免完全回发?有几个基于 AJAX 的文件上传小部件可能会满足您的目的......
【解决方案4】:
当您在服务器端遇到任何错误时,将所有表单发布数据设置在某个会话变量中并重定向到表单并显示填写此会话数据的表单。