如何从控制器和从jquery到控制器调用jquery函数

时间:2013-05-01 09:55:58

标签: c# asp.net-mvc razor

你好怎么我可以从registernewacct.cshtml调用homecontroller.cs中的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 个答案:

答案 0 :(得分:2)

它可能会帮助您阅读一些内容,以了解服务器端和客户端代码之间的差异;它们不是完全可以互换的,如果你认为可以随意来回调用,你可能会遇到一些逻辑问题。您的C#代码示例显示您正试图在控制器方法的中间获得用户的确认 - 这不是控制器方法应该如何工作。如果你想要这个,你应该考虑:

  • 使用客户端验证(jQuery有一个验证插件)
  • 使用AJAX请求在POST之前进行验证,而不是之后进行验证
  • 将此操作拆分为两个

话虽如此,有些地方你想要将控制从一个传递到另一个,所以这里是如何:

从客户端调用服务器端代码(例如控制器方法):

总之,AJAX。您可以使用jQuery的AJAX支持或ASP.NET MVC的Ajax.Action和其他AJAX帮助程序。无论如何,您基本上都需要将数据POST到路由到控制器方法的URL。默认情况下,www.example.com/{controller}/{method}/{param}是可选的param。将POST请求的JSON数据有效内容的属性命名为控制器方法所期望的参数。获取该方法以返回JSON对象(有一个内置的Json())转换)并且该JSON对象将被传递到AJAX成功处理程序。

从服务器调用客户端代码:

不严格可能;你不能直接打电话,但有办法在客户端上触发代码:

  • 最简单的方法是将代码放在$(document).ready()中,并在页面加载时运行。
  • 要在页面加载以外的时间运行代码,请让客户端定期检查服务器(通过AJAX)是否应运行某些代码。当你想“调用”客户端代码时,让服务器回复一些意味着“是”的东西,然后当客户端获得该响应时,它会运行代码。这种方法的问题在于它需要页面继续发送请求,这会占用带宽和处理能力,对于大的东西来说通常是一个坏主意,尽管你会发现它对于涉及非常少量的请求使用了相当多的一点数据和/或相当罕见。

答案 1 :(得分:1)

使用Jquery Ajax请求从客户端调用服务器。 从服务器到客户端你不能因为当你在服务器端时没有javascript功能客户端。 您需要了解服务器端和客户端语言之间的差异。