我想使用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();
}
答案 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
答案 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