2012-05-20 43 views
0

我在發出ajaxRequest後出現「目標窗體」上出現「必填字段」驗證消息時出現問題。MVC3 ajax驗證 - 首次顯示部分視圖時顯示的錯誤消息

我在表單中執行ajaxRequest命令,允許在不同的表單中呈現局部視圖(兩個表單在同一頁上,實際上是Telerik分隔器的窗格)。

// note "MyAjaxCall is passed (below) so that I can populate 
// the partial view with the model data 
splitter.ajaxRequest(".t-pane:last", "/HierarchyMember/Edit/" + hierarchyId, {requestType: "MyAjaxCall" }); 

我控制器簡單地得到適當的模型數據,並返回一個局部視圖

return PartialView(hierarchyMemberRepository.Find(hierarchyMember.Id); 

然後我的局部視圖內(稱爲「編輯」)我通過Ajax.BeginForm渲染(也注意,準備,因爲形式是動態加載的,我重裝不顯眼的驗證)

@using (Ajax.BeginForm("Edit" 
    , "HierarchyMember" 
    , new AjaxOptions { OnBegin = "ajaxOnBegin", OnFailure = "ajaxOnFailure()" 
     , HttpMethod = "Post", InsertionMode = InsertionMode.Replace 
     , OnSuccess = "ajaxOnSuccess(data, $('#submitButtonClicked')[0].value)" 
     , OnComplete = "ajaxOnComplete" } 
     , new { id = "editForm", name = "editForm" })) 
{ 
    @Html.ValidationSummary(false) 
    ... 
} 
<script...> 
    $(document).ready(function() { 
     var form = $("#editForm"); 
     // for validation 
     form.removeData("validator").removeData("unobtrusiveValidation"); 
     $.validator.unobtrusive.parse(form); 
    }); 
</script> 

我因此包括jquery.validate.min.js,jquery.unobtrusive-ajax.min.js,jquery.validate.unobtrusive.mi n.js在我的佈局 - 在ScriptRegistrar內,我已經嘗試了jQuery和jQueryValidation設置爲true和false

<script src="@Url.Content("~/Scripts/2012.1.419/jquery-1.7.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery-ui.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script> 
... 
@(Html.Telerik().ScriptRegistrar().jQuery(false).jQueryValidation(false).DefaultGroup(group => group.Combined(true).Compress(true))) 

要強制必填字段我有延長的EntityFramework的生成模型類的分部類如下

[Required()] 
public object HierarchyId; 
[Required()] 
public object HierarchyDescription; 

請注意,SQL Server中的上述兩個字段都定義爲NOT NULL(在Entity Framework(4.1)中,屬性屬性中的IsNullable標誌爲false。

我遇到的問題是當第一次出現局部視圖時,窗體上的所有必填字段都顯示「...必填字段」錯誤消息(不管該字段是否包含值)。如果我用上面的'Required'屬性排除部分類,錯誤消息就會消失,但是我沒有得到客戶端驗證(因此我可以在非空字段中輸入空格)

有沒有人有解決方案?

回答

0

大家很奇怪,上述發生的原因,那是因爲AJAX調用通過在我的控制器中的HTTP佈線後接受了完整的結構,其中包括一些[必需]字段的裝飾品去

該決議是調用控制器中的不同方法只接受那些正在通過的變量,因此沒有驗證失敗,一切都很好