500间隔错误MVC

时间:2015-12-08 00:18:16

标签: 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" 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>

这是我的控制器,

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

            return View();
        }

我将数据添加到我的Dropdownlist,

[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();
        }

3 个答案:

答案 0 :(得分:0)

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

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

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

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

尝试使用JSON.NET

对于detailed read

答案 1 :(得分:0)

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

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

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

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

通常,对于为ajax帖子提供服务的操作方法,最好返回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");
               }
        }

此外,看起来你有很多参数被发布到注册方法,而不是编写这么多参数,你应该使用视图模型。 Here是如何做到这一点的一个例子。

答案 2 :(得分:0)

如上所述,http 500是因为.Net代码中的例外。您是否正在开发中。如果是,请提供例外的详细信息。如果您以不同的方式进行操作,则可能会附加到W3Wp.exe。

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

http://www.codeproject.com/Articles/38132/Remote-IIS-Debugging-Debug-your-ASP-NET-Applicatio