2011-10-03 88 views
1

我有在ASP.NET MVC與阿賈克斯/ jQuery的回傳問題3.奇怪驗證問題3

  • 如果驗證失敗下面的代碼 ,預期的結果被給出並且表單不會發布。
  • 如果驗證成功,下面的函數不會在表單提交時觸發,表單將提交併返回一個json文件給瀏覽器。

如果有人能說出這些,我會很感激。

我包括我的部分視圖及以下控制器

我的視圖

@model TheLayer.EF.NoteAddPartial 

@{using (Html.BeginForm("Create", "Note", new { area = "" }, FormMethod.Post, new { id = "noteAdd" })) 
{ 

@Html.TextAreaFor(m => m.Note_Text, new { @class = "note-input" }) //note-input 
@Html.ValidationMessageFor(model => model.Note_Text)  

<input type="submit" value="Send" /> 

}} 

我的客戶端腳本(在視圖中)

<script type="text/javascript"> 

$(function() { 

    $('#noteAdd').submit(function (e) { 

     e.preventDefault(); 

     if ($(this).valid()) { 
      alert('posting'); 
      $.ajax({ 
       url: this.action, 
       type: this.method, 
       data: $(this).serialize(), 
       error: function (xhr, ajaxOptions, thrownError) { 
        alert('An error occured when processing this request:\r\n\r\n' + thrownError); 
       }, 
       success: function (result) { 
        alert(result.s); 
       } 
      }); 
     } 
     return false; 
    }); 
}); 

我的控制器

public class NoteController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Post)] 
    public JsonResult Create(NoteAddPartial model) 
    { 
     try 
     { 
      NoteMethods.CreateLeadNote(model.Note_Text, SessionManager.Current.ActiveUser.Username, model.ItemId, SessionManager.Current.ActiveUser.Company); 
      return Json(new { s = "Success" }); 
     } 
     catch (NoPermissionException) 
     { 
      return Json(new { s = "No permission" }); 
     } 

    } 
} 

我的偏

namespace XX 
{ 
/// <summary> 
/// Partial lead person view 
/// </summary> 
[MetadataType(typeof(NoteAddPartial_Validation))] 
public partial class NoteAddPartial 
{ 
    public string Note_Text { get; set; } 
    public int? Source { get; set; } 
    public string Username { get; set; } 
    public int ItemId { get; set; } 
    public int TypeId { get; set; } 

} 
public class NoteAddPartial_Validation 
{ 

    [Required] 
    public string Note_Text { get; set; } 

    [HiddenInput(DisplayValue = false)] 
    public int ItemId { get; set; } 

    [HiddenInput(DisplayValue = false)] 
    public int TypeId { get; set; } 

} 
} 
+0

使用不顯眼的驗證時,我無法攔截表單的提交。那是你想要做的,對吧?無論表單是否有效,都要攔截客戶端JavaScript中的'submit'事件並執行一些操作。在問題中明確說明可能會更快地爲您解答一個很好的答案。 – Cymen

回答

1

您是否添加了客戶端驗證庫?

jquery.validate.min.js

jquery.validate.unobtrusive.min.js

注:

如果您配置應用程式無法正常工作通過不顯眼的驗證,您不需要引用第二個庫。

+0

我同時擁有這兩項資產。 – Nick

+0

$(this).valid()應該工作。你有沒有發現任何javascript錯誤。檢查你的瀏覽器控制檯。 – tugberk

+0

這有幫助。這些參考文獻出現在兩個地方,都在腳本管理器上,並由我手動添加。再次感謝。 – Nick

0

嘗試附加到提交按鈕上的click事件,並將代碼從this更改爲按鈕父窗體的選擇器。

+0

'這個'不需要改變。它已經是一種形式。 – tugberk