2012-01-18 3 views
9

Когда форма размещена в моем контроллере, я делаю следующий чек:Как знать, если ModelState содержит ошибки

if(ModelState.IsValid) 

Если модель не является допустимой, ошибки добавляются в ModelState. Затем модель передается в представление с помощью сводки валидации.

Однако, я хочу проверить, есть ли ошибки ModelState внутри обработчика jQuery ready, так что я могу добавить некоторые дополнительные действия, если форма имеет ошибки. Это возможно?

ответ

26

Вы можете плюнуть глобальной JavaScript переменной:

<script type="text/javascript"> 
    var isValid = @Html.Raw(Json.Encode(ViewData.ModelState.IsValid)); 
</script> 

, а затем:

$(function() { 
    if (!isValid) { 
     alert('opa'); 
    } 
}); 
+1

ли вы использовать его? – gdoron

+1

@gdoron, который будет зависеть от конкретного контекста и точной проблемы, которую я пытаюсь решить. Поскольку ОП не предоставил никакого контекста, почему он должен знать, действительно ли модель действительна в обработчике document.ready, я не могу ответить на ваш вопрос, буду ли я использовать его, поскольку у меня недостаточно информации. Так что, как всегда, ответ: это зависит. –

+0

i jsut хотел получить идею tnx @DarinDimitrov, которая помогла alot –

2

немного дополнение к @Dimitrov ответ:

<script type="text/javascript"> 
    var isValid = '@Html.Raw(Json.Encode(ViewData.ModelState.IsValid))'; 

    if (isValid != 'true') 
     // model has some errors... 
</script> 

Это важно использовать одинарные qoutes вокруг помощник. В противном случае эта точка с запятой ; вызывает проблемы. Пустоту вы можете написать, а вы не можете, во всех случаях это вызывает синтаксическую ошибку. Если вы не поместите эти одинарные кавычки вокруг помощника, как я уже упоминал.

0

В дополнение к Darins Ответ:

В .cshtml:

@Html.Hidden("IsValid", Json.Encode(ViewData.ModelState.IsValid)) 

в JS

var isValid = $('#IsValid').val().toLowerCase() == "true";