C# 500区间误差MVC

C# 500区间误差MVC,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,我想使用ajax将数据从视图发送到控制器,但无法将数据发送到控制器 谢谢你的帮助 这是我的视图代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>SignUp</title> <link href="../../css/bootstrap.min.css" re

我想使用ajax将数据从视图发送到控制器,但无法将数据发送到控制器

谢谢你的帮助

这是我的视图代码

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>SignUp</title>
    <link href="../../css/bootstrap.min.css" rel="stylesheet">
    <link href="../../css/signin.css" rel="stylesheet">
    <script type="text/javascript" src="../../js/jquery-1.11.0.min.js"></script>    
    <script type="text/javascript">

        $(document).on("click", "#btnSignUp", function () {

            var tcNo = document.getElementById('inputTcn').value;
            var nameSurname = document.getElementById("Name").value;
            var eMail = document.getElementById('Email').value;
            var number = document.getElementById("PhoneNumber").value;
            var secretQuestionAnswer = document.getElementById("inputSecretQuestionAnswer").value;
            var password = document.getElementById('inputPassword').value;
            var passwordVerify = document.getElementById("passwordVerify").value;
            //var stateValue = document.getElementById("viewStates").value;

            $.ajax({
                type: 'POST',
                url: '/Home/SignUp',
                dataType: 'json',
                data: {
                    'tcNo': tcNo,
                    'nameSurname': nameSurname,
                    'eMail': eMail,
                    'number': number,
                    'secretQuestionAnswer': secretQuestionAnswer,
                    'password': password,
                    'passwordVerify': passwordVerify,
                    'stateValue': stateValue
                },
                success: function (msg) {
                    alert("bsg");
                },
                error: function (msg) {
                    alert("2");
                }
            });

        });
    </script>
</head>
<body>
    <div class="container">
        <form class="form-signin">

            <h2 class="form-signin-heading"></h2>
            <input id="inputTcn" class="form-control" placeholder="T.C. NO GİRİNİZ" required="" autofocus="">
            <input id="Name" class="form-control" placeholder="ADINIZI SOYADINIZI GİRİNİZ" required="">
            <input id="Email" class="form-control" placeholder="E-MAIL GİRİNİZ" required="">
            <input id="PhoneNumber" class="form-control" placeholder="GSM NUMARANIZI GİRİNİZ" required="">
            <input id="inputSecretQuestionAnswer" class="form-control" placeholder="ÖZEL SORUNUZUN CEVABINI GİRİN">
            <input type="password" id="inputPassword" class="form-control" placeholder="ŞİFRENİZİ GİRİNİZ" required="">
            <input type="password" id="passwordVerify" class="form-control" placeholder="ŞİFRENİZİ TEKRAR GİRİNİZ" required="">
            @Html.DropDownList("viewStates")

            <a id="btnSignUp" class="btn btn-lg btn-primary btn-block btn-danger">KAYIT OL</a>

        </form>
    </div>
</body>
</html>
我在这里的下拉列表中添加数据

[HttpGet]
        public ActionResult SignUp()
        {
            var database = new KargoDB();
            List<SelectListItem> stateList = (from s in database.States
                select new SelectListItem
                {
                    Text = s.Description,
                    Value = (s.State_id).ToString()
                }).ToList();

            ViewBag.viewStates = stateList;

            return View();
        }
[HttpGet]
公共行动结果注册()
{
var database=new KargoDB();
List stateList=(来自database.States中的s
选择新的SelectListItem
{
Text=s.说明,
值=(s.State_id).ToString()
}).ToList();
ViewBag.viewStates=状态列表;
返回视图();
}

不是从控制器返回视图,而是返回JSON结果并解析结果并将其绑定到下拉列表

由于您试图从
HTTPGet
控制器检索数据,因此应该使用
Get
的HTTP方法

    [HttpGet]
    public JSONResult SignUp()
    {
        return Json(resultset, JsonRequestBehavior.AllowGet);
    }

    success: function (msg) {
        // parse msg and bind to dropdown
    },
试用


对于

500错误代码表示内部服务器错误。这意味着您的服务器端代码在HttpPost
Signup
方法中崩溃

如果打开浏览器的“网络”选项卡,并单击所做请求的响应,您将能够看到响应(asp.net mvc返回的异常详细信息)。这将帮助您确定问题所在

HttpPost
操作方法中,调用了
returnview()
,它将返回
Signup.cshtml
razor视图。但是在注册视图中,与我们的GET操作类似,它将查找
ViewBag.viewStates
以呈现状态下拉列表。但是我们没有在我们的
HttpPost
注册方法中设置它。因此,当razor尝试渲染视图时,它将以空引用异常结束

请记住,Http是无状态的。一个请求不知道上一个请求中发生了什么。这意味着,HttpPost操作的请求不知道您在上一个请求(GET请求)中设置的ViewBag项目

通常,对于服务于ajax POST的操作方法,最好返回JSON响应

因此,不是返回View(),而是返回json结构

[HttpPost]
public ActionResult SignUp(string tcNo, string nameSurname, string eMail, 
           string number,string secretQuestionAnswer, string password, 
                                         string passwordVerify, string stateValue)
{

    return Json(new {status = "success"});
}
这将返回一个json结构,如

{"status" : "success"}
您可以在
success
事件处理程序中读取这些信息

success: function (msg) {
               console.log(msg);
               if(msg.status==="success")
               {
                   alert("Saved");
               }
        }
另外,看起来您有很多参数被发布到Signup方法,而不是编写这么多参数,您应该使用视图模型。
是一个关于如何做到这一点的示例。

如上所述,http 500是因为.Net代码中出现异常。您是在开发过程中得到的吗。如果是,请提供例外情况的详细信息。如果您以不同的方式连接W3Wp.exe,则可以将其附加到W3Wp.exe

如果它托管在dev/QA服务器中,请使用远程调试机制。在生产中查看windows eventviewer。有时你会看到什么是例外。一旦异常可见,只需谷歌或张贴在这里


您是否尝试调试该操作?你什么时候拿到500?为什么不绑定到模型并提交模型。ajax选项将返回类型指定为json,但返回html@cFrozenDeath我把调试器放在视图中,当我进入检查模式并按下按钮时,控制台选项卡上写着,@cfrozendath POST 500(内部服务器错误)我不知道该怎么做,我该怎么做@StephenMueckethank you,但我有个问题。当我更改代码(如您的代码)时,查看警报“bsg”,这就是我想要的。但数据并没有到达控制器端。我尝试了2次将其全部为空,但警告“bsg”。确保您的控制器方法接收到所有参数并处理它们,并从服务器返回HTTP状态200。要清除,我应该将HttpGet方法类型更改为JsonResult,如果成功,我应该在视图中更改成功部分。结果集应该是什么?我应该在哪里声明它?谢谢你的帮助,当我像你一样更改代码时,我没有得到任何错误,但有一个问题。问题是ajax不会将数据发送到控制器。我应该如何将数据视图发送到控制器?您如何知道它没有发送?您是否检查了浏览器的“网络”选项卡?你有404错误吗?到底是什么不起作用。我在一个新项目中尝试了完全相同的代码,效果很好。所以,您一定在做一些不同的事情。当我将断点放在我的HttpPost注册方法上时,我看不到参数的值,但在我的视图页面中看到“已保存”警报您使用的是哪个版本的mvc?我尝试了完全相同的代码,效果很好。你能创建一个新的项目,尝试一下并分享代码吗?这是我这个项目的git,你可以克隆它,它是公共的。这是MVC5。当我在HttpPost注册方法中放置断点时,它没有停止,只是显示“已保存”警报,这就是为什么我看不到参数,因为它没有在调试点停止。如果您愿意,我也可以使用Teamviewer,ufukdogan1993@hotmail.com这是我的facebook电子邮件,如果你在搜索栏中搜索我的邮件,你可以很容易找到我,我不想在这里写我的Teamviewer Id
success: function (msg) {
               console.log(msg);
               if(msg.status==="success")
               {
                   alert("Saved");
               }
        }