2013-05-01 48 views
0

嗨guyz如何從我的homecontroller.cs我的registernewacct.cshtml中調用jquery函數。而且背部和堡壘....如何從控制器和從jquery到控制器調用jquery函數

我在homecontroller.cs

 [AcceptVerbs(HttpVerbs.Get)] 
    private bool IsValidRegisterNewAcct(string acctname, string dispname, string email, string password) 
    { 
     var crypto = new SimpleCrypto.PBKDF2(); 
     bool IsValid = false; 
     IsValidErrorMessage = ""; 
     IsValidErrorMessageInt = 0; 
     string NewAcctNameHash = MD5(acctname); 
     string NewEmailHash = MD5(email); 
     try 
     { 
      using (var db = new MainDbContext()) 
      { 

       var NewAcctName = db.user.FirstOrDefault(u => u.AcctNameSalt == NewAcctNameHash); 

       if (NewAcctName != null) 
       { 
        IsValid = false; 
        IsValidErrorMessage = "Account Name already Exist!"; 
       } 
       else 
       { 
        var NewEmail = db.user.FirstOrDefault(u => u.EmailSalt == NewEmailHash); 
        if (NewEmail != null) 
        { 
         IsValid = false; 
         IsValidErrorMessage = "Email Address already Exist!"; 
        } 
        else 
        { 
         //THIS AREA <-- I wan to call my jquery function in my registernewacct.cshtml which is the dialog confirmation will ask if save or not. now if the answer is yes then it will return value yes. if not then it will return not. 


         var InsertNewAcctName = db.user.CreateObject(); 

         InsertNewAcctName.UserId = Convert.ToString(Guid.NewGuid()); 
         InsertNewAcctName.AcctName = acctname; 
         InsertNewAcctName.AcctNameSalt = NewAcctNameHash; 
         InsertNewAcctName.DisplayName = dispname; 
         InsertNewAcctName.Email = email; 
         InsertNewAcctName.EmailSalt = MD5(email); 
         InsertNewAcctName.Password = crypto.Compute(password); 
         InsertNewAcctName.PasswordSalt = crypto.Salt; 
         InsertNewAcctName.UserLevel = 2; 

         db.osoa_user.AddObject(InsertNewAcctName); 

         db.SaveChanges(); 
         IsValid = true; 
        } 
       } 
      } 
     } 

這個代碼是在代碼我registernewacct.cshtml

@section Scripts{ 
    <script> 
     $(document).ready(function(){ 
      //THIS IS FOR THE CANCEL ACCOUNT DIALOG 
      function OpenDialogConfirmation(){ 
       $("#SaveDialogPage").dialog("open"); 
      } 

      $("#yessavedialog").click(function(e) { 
       $("#SaveDialogPage").dialog("close"); 
       //then the code here that will pass my value back to homecontroller.cs.... 
      }); 


      $("#cancelsavedialog").click(function(e) { 
       $("#SaveDialogPage").dialog("close"); 
       //then the code here that will pass my value back to homecontroller.cs.... 
      }); 

     }); 
    </script> 
} 

你能給我一些建議嗎?非常感謝

回答

2

它可能會幫助您閱讀一些內容來了解​​服務器端代碼和客戶端代碼之間的差異;它們不是完全可以互換的,如果你認爲你可以隨意地來回打電話,你可能會遇到一些邏輯問題。您的C#代碼示例顯示您正試圖在控制器方法中獲得用戶的確認 - 這不是控制器方法應該如何工作的。如果你想要這個,你應該考慮:

  • 使用客戶端驗證(jQuery有一個驗證插件)
  • 使用AJAX請求發佈,而不是事後做
  • 拆分此行動之前驗證成兩個

話雖如此,有些地方你會想從一個到另一個傳送控制,所以這裏的如何:

調用服務器端代碼(例如。控制器方法):

總之,AJAX。您可以使用jQuery的AJAX支持或ASP.NET MVC的Ajax.Action和其他AJAX幫助程序。但是,您需要將數據發佈到路由到您的控制器方法的URL。默認情況下,這將是www.example.com/{controller}/{method}/{param},其中param是可選的。將您的POST請求的JSON數據有效負載的屬性命名爲您的控制器方法所期望的參數。獲取該方法返回一個JSON對象(有一個內置的Json())轉換),並且該JSON對象將被傳遞到AJAX成功處理程序中。

若要從服務器調用客戶端代碼:

不嚴格可能的;你真的不能直接調用但有辦法觸發客戶端代碼:

  • 最簡單的就是把你的代碼在$(document).ready(),並加載頁面時,它會運行。
  • 要在頁面加載以外的時間運行代碼,請讓客戶端定期與服務器(通過AJAX)檢查是否應該運行某些代碼。當你想「調用」客戶端代碼時,讓服務器回答一些意思是「是」的東西,然後當客戶端獲得該響應時,它會運行代碼。這種方法的問題在於它要求頁面保持發送請求的能力,這消耗了帶寬和處理能力,對於大事來說這通常是一個糟糕的主意,儘管你會看到它對請求涉及的數量非常少的數據和/或相當罕見。
+0

謝謝:D ..我會嘗試再次修改我的程序:) – user2328935 2013-05-02 07:46:43

1

使用Jquery Ajax請求從客戶端調用服務器。 從服務器到客戶端,您不能在服務器端訪問客戶端的JavaScript函數。 您需要了解服務器端和客戶端語言之間的差異。

+0

所以在這種情況下,你能不能給我一些指導應該怎樣,我要去做到...... – user2328935 2013-05-01 10:12:39

+1

我不能幫你,因爲你不知道他們溝通一下服務器和客戶端,以及如何。你的mvc邏輯也很糟糕。你必須在開始編碼之前理解事物。 如果您想在控制器中間向用戶提問,只需將該控制器分成兩部分併發送詢問。但想想我說的是什麼......先研究邏輯。 – 2013-05-01 10:20:50

相關問題