500间隔错误MVC

本文关键字:MVC 错误 500间 | 更新日期: 2023-09-27 18:25:59

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

谢谢你的帮助。

这是我的View代码,

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

500间隔错误MVC

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

如果你打开浏览器的网络选项卡,点击你提出的请求的响应,你将能够看到响应(asp.net mvc返回的异常详细信息)。这将帮助您识别问题。

HttpPost操作方法中,您调用了return View(),它将返回Signup.cshtml剃刀视图。但在注册视图中,类似于我们的GET操作,它将查找ViewBag.viewStates来呈现状态下拉列表。但我们没有在HttpPost注册方法中设置它。因此,当剃刀试图渲染视图时,它将以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");
               }
        }

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

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

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

    [HttpGet]
    public JSONResult SignUp()
    {
        return Json(resultset, JsonRequestBehavior.AllowGet);
    }
    success: function (msg) {
        // parse msg and bind to dropdown
    },

尝试使用JSON.NET

有关详细信息,请阅读

如上所述,http 500是由于.Net代码中的一个异常。你正在开发中吗。如果是,请给出异常的详细信息。如果您以某种不同的方式执行W3Wp.exe,则可以附加它。

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

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