C# 500区间误差MVC
我想使用ajax将数据从视图发送到控制器,但无法将数据发送到控制器 谢谢你的帮助 这是我的视图代码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
<!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");
}
}