【问题标题】:ASP.NET MVC how to reset form when action returns a FileResult?ASP.NET MVC 如何在操作返回 FileResult 时重置表单?
【发布时间】:2011-01-22 02:38:48
【问题描述】:

我有一个 ASP.NET MVC 表单,如果数据有错误,或者如果一切正常,它在提交时可以返回 ActionResult,它会重定向到返回 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 错误,以便用户可以更正并重试。

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

【问题讨论】:

标签: html asp.net-mvc forms submit


【解决方案1】:

除了@tv 所说的,您可能会考虑使用合成模型。也就是说,一个模型有两个模型。第一个将获取您的表单详细信息,第二个将获取文件详细信息。

当你从成功返回时,你可以返回一个空的表单模型和一个填充的文件模型。

那么,我可能在这里错了,但 UI 应该真正照顾好自己。

【讨论】:

    【解决方案2】:

    我建议返回一个带有一些触发下载的 javascript 的新表单(以及一个在下载未开始时使用的链接)。我觉得这是确保它在使用和不使用 javascript 的情况下都能正常工作并获得你想要的那种行为的最佳方式。

    【讨论】:

    • 好主意 - 我并没有真正考虑过两步过程,我专注于尝试一步完成所有事情。
    • 我已经对代码进行了更改:如果原始视图中的所有内容都有效,则调用新视图。在这个新视图中,它会按照您的建议执行并通过文件的操作自动加载文件。似乎工作得很好!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多