2010-02-28 61 views
3

我有一个ASP.NET MVC表单,当提交时可以返回ActionResult,如果数据有错误,或者一切正常,它会重定向到返回FileResult的不同操作。ASP.NET MVC如何在操作返回FileResult时重置表单?

我已经创建了一些样本来提供我正在做的事情的想法。这是HTML:

<% 
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 
} 

的原因ActionResult是填充ModelState中的错误,以便用户可以纠正并再试一次。

这一切工作正常,除了我希望表单被重置或清除,如果服务器返回一个文件。目前用户获得一个文件对话框,但表单保留了提交的值。如何在成功提交后重置表单?

+0

请参阅http://stackoverflow.com/questions/2345756/ http://stackoverflow.com/questions/2297670/ http://stackoverflow.com/questions/707569/ – 2010-02-28 22:02:45

回答

1

我会建议返回一个JavaScript的新位置触发下载一个新的表单(以及一个链接,如果下载不启动)。我觉得这是确保它既可以使用JavaScript也可以不使用JavaScript的最佳方式,并且可以让你获得所需的行为。

+0

好主意 - 我真的没有想到关于两个步骤的过程,我专注于尝试一步到位。 – eyesnz 2010-03-04 20:13:46

+0

我对代码进行了更改:如果从原始View中的所有内容都有效,则调用一个新的View。在这个新视图中,它按照您的建议进行操作,并通过文件操作自动加载文件。似乎很好!谢谢! – eyesnz 2010-03-04 20:15:13

0

除了@tv所说的你可能会考虑建立一个复合模型。也就是说,有两种模式的模型。第一个将采取你的表格细节,第二个文件细节。

当您从成功返回时,可以返回空表格模型和填充文件模型。

然后,我可能会在这里遇到困难,但用户界面应该真正照顾自己。

相关问题