C # ASPNET MVC - Как вы используете ModelState.IsValid в обратной передаче jquery / ajax? - PullRequest
1 голос
/ 03 мая 2010

Из того, что я видел, ModelState.IsValid рассчитывается только по работе с кадром MVC при полной обратной передаче, это правда?

У меня есть постбэк jquery:

var url = "/path/to/controller/myaction";
var id = $("#Id").val();
var somedata = $("#somedata").val();  // repeated for every textbox
$.post(url, { id: id, somedata: somedata },
function (data) {
  // etc
});

И действие контроллера выглядит так:

* +1007 *

Но, похоже, это не вызывает ModelState.IsValid. Например, если длина некоторых данных составляет 5 символов, но в DataAnnotation указано [StringLength (3)] - в этом случае ModelStae.IsValid по-прежнему имеет значение true, поскольку не было инициировано.

Есть ли что-то особенное, что мне нужно сделать при создании сообщения jquery / ajax вместо полного сообщения?

Спасибо!

1 Ответ

1 голос
/ 03 мая 2010

Нет, делать особо нечего. Возможно, что-то не так с вашей логикой публикации. Вместо установки опубликованных значений вручную, попробуйте использовать jQuery Form Plugin . это облегчает публикацию ajax и помогает избавиться от странных ошибок.

Я только что подготовил простой пример, и он работал нормально (он использовал форму jQuery) ( EDIT: $ .post ('/ Login / Test3', {AAA: $ ('# AAA'). Val ()} ); тоже работал нормально):

Контроллер:

public class Test3ViewModel
{
    [StringLength(3)]
    public string AAA { get; set; }
}

[HttpPost]
public int Test3(Test3ViewModel model)
{
    if (ModelState.IsValid)
    {
        return 1;
    }
    return 2;
}

Вид:

<form method="post" action="/Login/Test3" id="form_test3">
    <%= Html.TextBox( "AAA" ) %>
<input type="submit" value="OK" />
</form>

<script type="text/javascript">
    $(document).ready(
        function() {
            $('#form_test3').ajaxForm(function() {
                alert("Post works fine:)");
            });
        }
    );
</script>
...