2010-05-02 32 views
1

從我所看到的ModelState.IsValid只能通過MVC框架的完整回發計算,這是真的嗎?C#ASPNET MVC - 你如何在jQuery/ajax回發中使用ModelState.IsValid?

我有一個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 
}); 

而控制器動作的樣子:

public JsonResult MyAction(MyModel modelInstance) 
{ 
    if (ModelState.IsValid) 
    { 
     // ... ModelState.IsValid is always true, even when there is invalid data 
    } 
} 

但是,這似乎並沒有引發ModelState.IsValid。例如,如果有些數據長度爲5個字符,但DataAnnotation表示[StringLength(3)] - 在這種情況下,ModelStae.IsValid仍然爲真,因爲它尚未觸發。

有沒有什麼特別的事情,我需要做一個jQuery/ajax後,而不是一個完整的職位?

謝謝!

回答

1

不,沒有什麼特別的。你的發佈邏輯有點可笑。不要手動設置張貼值,請嘗試使用jQuery Form Plugin。它使ajax發佈更容易,並有助於擺脫奇怪的錯誤。編輯:$ .post('/ Login/Test3',{AAA:$('#AAA')。val()})我只準備了一個簡單的例子,它工作得很好(它使用jQuery表單)() ;工作也沒關係):

控制器:

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> 
+0

我比你的樣品,看看有什麼可能是錯誤的,但都沒有發現問題。我的代碼在表單動作和$ .post url上確實有不同的url - 但是讓它們一樣沒有區別。 – 2010-05-03 01:03:21

+0

一個可能的差異:我不回發所有模型字段。某些字段可以爲空,並且不會在此方法中更新,因此它們不會被回發。你認爲這會有所作爲嗎? – 2010-05-03 01:04:52

+0

我注意到的另一件事:在我的控制器操作中,模型對象正確填充了發佈的數據。但是ModelState是空的(.count = 0)。 – 2010-05-03 01:05:42

相關問題