2010-02-28 72 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所說的你可能會考慮建立一個複合模型。也就是說,有兩種模式的模型。第一個將採取你的表格細節,第二個文件細節。

當您從成功返回時,可以返回空表格模型和填充文件模型。

然後,我可能會在這裏遇到困難,但用戶界面應該真正照顧自己。

相關問題