ASP.NET MVC, как сбросить форму, когда действие возвращает FileResult? - PullRequest
3 голосов
/ 01 марта 2010

У меня есть форма 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, чтобы пользователь мог исправить и повторить попытку.

Это все работает нормально, за исключением того, что я хотел бы, чтобы форма была сброшена или очищена, если файл возвращается сервером. В настоящее время пользователь получает диалог File, но форма сохраняет отправленные значения. Что я могу сделать, чтобы сбросить форму после успешной отправки?

Ответы [ 2 ]

1 голос
/ 01 марта 2010

Я бы порекомендовал вернуть новую форму с небольшим количеством javascript, который запускает загрузку (вместе со ссылкой для использования, если загрузка не начинается). Я чувствую, что это лучший способ убедиться, что он работает как с javascript, так и без него и дает вам то поведение, которое вам нужно.

0 голосов
/ 01 марта 2010

В дополнение к тому, что сказал @tv, вы можете рассмотреть возможность использования композитной модели. То есть модель, которая имеет две модели. Первая будет содержать данные вашей формы, а вторая - данные файла.

Когда вы вернетесь из успеха, вы можете вернуть пустую модель формы и заполненную модель файла.

Тогда, и я мог бы быть здесь сильным, но пользовательский интерфейс должен действительно позаботиться о себе.

...