1

我正在使用asp.net MVC3和客戶端驗證,以幫助驗證我的表單。這工作出色,但我遇到了一個不尋常的情況。我的表單的一部分(準確地說是2個輸入)從局部視圖加載。這些字段有其自己的驗證規則(如'必需'),並按預期工作。好吧,差不多。奇怪的是,在頁面加載時,只要「請求」部分視圖,規則似乎就會運行。所以我會有大約20個表單域左右;其中2個(來自部分視圖)陳述'此字段是必需的'。爲什麼我的部分視圖在頁面加載時被驗證?

這裏是我的調用局部視圖父頁面:

[Required(ErrorMessage = "This is required.")] 
public string foo { get; set; } 

顯示在我的部分觀點認爲輸入和驗證:

@Html.Action("Index", "Foo", @Model.Foo) 

在我的局部視圖模型設置屬性

@Html.LabelFor(m => m.test, "Test") 
@Html.TextBoxFor(m => m.test) 
@Html.ValidationMessageFor(m => m.test) 

調用控制器的局部視圖:

public ActionResult Index(Foo myModel) 
{ 
    return PartialView("_PartialView", myModel); 
} 

有沒有人知道可能是什麼原因造成的?如果沒有,我有什麼方法可以調試這個驗證來找出發生了什麼?

+2

你能提供我們的代碼嗎? –

+0

感謝提示@ ashkan-mobayen-khiabani,我用我認爲是相關的代碼更新了我的帖子。 – Jonathan

回答

3

發生這種情況的原因是,當默認模型聯編程序試圖從請求值中解析Index動作的參數myModel時,它會自動向ModelState添加錯誤。我懷疑你傳遞的Model.Foo是無效的。

一種可能性是清除模型狀態,如果你想:

public ActionResult Index(Foo myModel) 
{ 
    ModelState.Clear(); 
    return PartialView("_PartialView", myModel); 
} 

另一種可能性是通過一個Foo實例,它是有效的(即test屬性必須有一個值)。事實上,如果你不想通過你並不真的需要這個動作參數的值,並且你可以有這樣的動作:

public ActionResult Index() 
{ 
    var myModel = new Foo(); 
    return PartialView("_PartialView", myModel); 
} 

,現在因爲沒有操作參數的默認模型沒有按粘結劑試圖解析它,它不會添加模型錯誤。

+0

非常感謝你@ darin-dimitrov,你讓我從無奈中解脫出來。我必須通過一個現有的模型,所以第一個解決方案對我來說非常合適。 – Jonathan

相關問題