我有一个ASP.NET MVC表单,如果提交的话可以返回ActionResult
,如果数据出错,或者一切正常,它会重定向到返回{{1}的其他操作}。
我已经创建了一些示例来提供我正在做的事情。这是html:
FileResult
,控制器代码为:
<%
using (Html.BeginForm())
%>
<%= Html.ValidationSummary(
"Edit was unsuccessful. Please correct the errors and try again.") %>
<%= Html.TextBox("YourName", Model.YourName)%>
<%= Html.ValidationMessage("YourName", "*") %>
<input type="submit" />
<% } %>
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyPostSample(string YourName)
{
if (string.IsNullOrEmpty(YourName))
{
ModelState.AddModelError("YourName", "You must specify a name");
}
if (ModelState.IsValid)
{
// get the file
RedirectToAction("GetFile");
}
else
{
// return this actions View with errors
return View();
}
}
public FileResult GetFile(string YourName)
{
// return file here
}
的原因是填充ModelState错误,以便用户可以更正并重试。
这一切都运行正常,除非我希望在服务器返回文件时重置或清除表单。目前,用户获取“文件”对话框,但表单保留了提交的值。成功提交后,如何重置表单?
答案 0 :(得分:1)
我建议使用一些触发下载的javascript返回一个新表单(以及如果下载没有启动则使用的链接)。我觉得这是确保无论是否使用javascript都可以运行的最好方法,并且可以为您提供所需的行为。
答案 1 :(得分:0)
除了@tv所说的,你可以考虑使用复合模型。也就是说,有两个模型的模型。第一个是表单详细信息,第二个是文件详细信息。
当您从成功返回时,您可以返回空表单模型和填充文件模型。
然后,我可能会在这里遇到麻烦,但UI应该真正照顾好自己。