2011-05-18 87 views
2

所以我做的是,我有一個控制器,檢查我的表單中的輸入是否正確。如果不是,它會在ViewBag中放入一條錯誤消息並返回視圖。像這樣(不重要的東西離開了):ASP.NET MVC3在使用FormCollection之後再次填寫表單

var name = formCollection.Get(cr.Category.name + "-name-" + i).Trim(); 
var dateOfBirth = formCollection.Get(cr.Category.name + "-dateOfBirth-" + i).Trim(); 
var passportno= formCollection.Get(cr.Category.name + "-passportno-" + i).Trim(); 

if (name.Equals("") || dateOfBirth.Equals("") || passportno.Equals("")) 
{ 
    ViewBag.ErrorMessage = "Please fill in all required fields at " + cr.Category.naam; 
    return View("BulletinForm3"); 
} 

而我的觀點是這樣的(不重要的東西離開了):

<input name="@(cr.Category.naam)[email protected]" value="" /> 
<input name="@(cr.Category.naam)[email protected]" value="" /> 
<input name="@(cr.Category.naam)[email protected]" value="" /> 

@if (ViewBag.ErrorMessage != null) 
{ 
    <p class="error">@ViewBag.ErrorMessage</p> 
} 

所以會發生什麼,當你忘記填寫必填字段?它返回視圖並顯示錯誤消息,但是所有已經填充的字段都是空的...因此,我想要做的是使用FormCollection在返回視圖後將其填充回來。我把的FormCollection在ViewBag這樣的:

ViewBag.ErrorMessage = "Please fill in all required fields at " + cr.Category.naam; 
ViewBag.FormCollection = formCollection; 
return View("BulletinForm3"); 

並在視圖改變了這一點:

<input name="@(cr.Category.naam)[email protected]" value="@if (ViewBag.FormCollection != null) { ((FormCollection)ViewBag.FormCollection).Get(cr.Category.naam + "-name-" + i);}" /> 

但是,它不符合的FormCollection的數值輸入字段填寫.. 。FormCollection不是空的(測試它)和名稱是相同的(計數器(我)不會改變或什麼)。 我在做什麼錯?

在此先感謝

回答

0

,因爲我無法找到一個解決方案,我決定使用的,而不是在驗證JavaScript驗證控制器。現在,沒有回傳,所以不需要再次填寫字段。

2

我認爲這是一個週期性的事情。

當我使用視圖的創建,我在一個空的視圖模型

return View("_CreateUserForm", new CreateUserViewModel()); 

我使用HTML幫手「爲」的方法寫的形式,填充控制發送,如果有一個值(或默認)

@Html.CheckBoxFor(m => m.FindCriteria.TermsHaveBeenAccepted) 
@Html.HiddenFor(m => m.MyHiddenValue) 

在回傳,MVC自動的基於填充表單上我的模型值

ActionResult SaveNewUser(
    [Bind(Prefix = "")] CreateUserViewModel editUserViewModel) 

開(驗證)的錯誤,我可以將此模型發到我的看法,這將填充控制我

return View("_CreateUserForm", editUserViewModel); 
+0

這就是我在其他觀點中所做的,是的。但是這個觀點不同,它是一種靜態的視圖,它創建了不同模型的實例。不僅個人(我所展示的),而且還有一個組織,一個團隊等的輸入字段。然後個人被添加到控制器中的組織等等。因此,不存在1個模型,但是多個。 – Hanz 2011-05-18 10:49:29