C# 通过Ajax发布到MVC控制器
您好,我目前正在尝试获取一个表单,以便使用AJAX发布控制器。但是,到目前为止,我没有运气,我一直在尝试获取表单,以便在提交表单时将表单中的值提交给控制器,但这不起作用。有人知道为什么吗 CSHTML:C# 通过Ajax发布到MVC控制器,c#,jquery,ajax,visual-studio,model-view-controller,C#,Jquery,Ajax,Visual Studio,Model View Controller,您好,我目前正在尝试获取一个表单,以便使用AJAX发布控制器。但是,到目前为止,我没有运气,我一直在尝试获取表单,以便在提交表单时将表单中的值提交给控制器,但这不起作用。有人知道为什么吗 CSHTML: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <tit
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Abintegro Search Prototype</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script>
$("#submitsearch").click(function (e) {
e.preventDefault();
var form = $("#searchform");
$.ajax({
url: "Search/GetSearchDetails",
data: form.serialize(),
type: 'POST',
success: function (data) {
//Show popup
$("#popup").html(data);
}
});
});
</script>
<!-- Javascript function to add autocomplete search phrases for the company name text search-->
<script>
$(function () {
var searchPhrases = [
"Zep Solutions",
"Wetherby Consultants Ltd",
"Webmploy",
"WATS Recruitment Ltd",
"Vital Resources",
"VG Charles and Co",
"Veredus UK",
"Venn Group",
"VanDuo Consulting"
];
$("#phrases").autocomplete({ source: searchPhrases });
});
</script>
</head>
<body>
<form id="searchform" name="searchform">
<div class="company-textbox">
<label for="companyname">Company Name</label>
<input id="phrases" name="companyname">
</div>
<br />
<div class="specialities">
<label for="specialities-dropdown">Specialities:</label>
<select name="specialities-dropdown">
<option value="Consumer Products & Services">Consumer Product & Services</option>
<option value="Support Services">Support Services</option>
<option value="Communication & Entertainment">Communication & Entertainment</option>
<option value="Business & Professional Services">Business & Professional Services</option>
<option value="Public Sector">Public Sector</option>
<option value="Not for profit">Not for profit</option>
<option value="Sports Information">Sports Information</option>
</select>
</div>
<br />
<div class="category">
<label for="category-dropdown">Category:</label>
<select name="category-dropdown">
<option value="Generalist">Generalist</option>
<option value="Specialist">Specialist</option>
<option value="Exec Search">Exec Search</option>
<option value="Interim Management">Interim Management</option>
</select>
</div>
<br />
<div class="location-dropdown">
<label for="location-dropdown">Location:</label>
<select name="Location">
<option value="London">London</option>
<option value="Bristol">Bristol</option>
<option value="Manchester">Manchester</option>
<option value="Birmingham">Birmingham</option>
</select>
</div>
<input type="submit" value="Submit" name="submitsearch" id="submitsearch">
</form>
</body>
</html>
使用此Javascript代码而不是当前代码。我已经纠正了发布数据中的问题,正确的格式如下:
$(“#提交搜索”)。单击(函数(e){
var postData=$(this.serializeArray();
e、 预防默认值();
变量形式=$(“#搜索形式”);
$.ajax({
url:“搜索/GetSearchDetails”,
数据:postData,
键入:“POST”,
成功:功能(数据){
//显示弹出窗口
$(“#弹出窗口”).html(数据);
}
});
});
从我所看到的情况来看,表单控件和控制器操作没有正确链接,因为控件的名称与操作的参数不同
还要将ajax调用中的contentType更改为JSON,并将表单数据转换为JSON字符串。这样,如果在通过Ajax提交表单数据之前将表单数据输出到控制台,则可以看到发送的内容
尝试以下修改:
@{
布局=空;
}
Abintegro搜索原型
$(“#提交搜索”)。单击(函数(e){
e、 预防默认值();
var formData=JSON.stringify($(“#searchform”).serializeArray();
console.log(formData);
$.ajax({
url:“搜索/GetSearchDetails”,
数据:formData,
键入:“POST”,
contentType:'json'
成功:功能(数据){
//显示弹出窗口
$(“#弹出窗口”).html(数据);
}
});
});
$(函数(){
var搜索短语=[
“Zep解决方案”,
“威瑟比顾问有限公司”,
“Webmploy”,
“华特招聘有限公司”,
“重要资源”,
“VG查尔斯公司”,
“Veredus英国”,
“维恩集团”,
“万多咨询”
];
$(“#短语”).autocomplete({source:searchPhrases});
});
公司名称
专业:
消费品与服务
支持服务
传播与娱乐
商业及专业服务
公共部门
非营利性
体育信息
类别:
通才
专家
执行搜索
临时管理
地点:
伦敦
布里斯托尔
曼彻斯特
伯明翰
要解决此问题,以便post将值映射到参数,我执行了以下操作:
function postToAjax() {
debugger;
var companyname = $('#phrases').val().toString();
var specialities = $('#specialities').val().toString();
var categorys = $('#categorys').val().toString();
var locations = $('#locations').val().toString();
var postData = $(this).serializeArray();
var form = $("#searchform");
$.ajax({
url: "Search/GetSearchDetails",
data: { 'companyname': companyname, 'specialities': specialities, 'categorys': categorys, 'locations':locations },
type: 'POST',
success: function (data) {
//Show popup
$("#popup").html(data);
}
});
}
</script>
函数postToAjax(){
调试器;
var companyname=$('#短语').val().toString();
var specialities=$(“#specialities”).val().toString();
var categorys=$('#categorys').val().toString();
变量位置=$(“#位置”).val().toString();
var postData=$(this.serializeArray();
变量形式=$(“#搜索形式”);
$.ajax({
url:“搜索/GetSearchDetails”,
数据:{'companyname':companyname,'specialities':specialities,'categorys':categorys,'locations':locations},
键入:“POST”,
成功:功能(数据){
//显示弹出窗口
$(“#弹出窗口”).html(数据);
}
});
}
通过为每个值创建变量,我可以映射数据中的值对,控制器中参数的名称是值对的第一部分,后面是从存储表单元素值的已创建变量中获取的值。form.serialize()产生了什么?最好是为
POST
操作创建一个poco类,并从脚本中相应地感知数据。尝试在.ajax调用中插入数据类型:“html”作为参数。到底什么不起作用?你能调试Javascript以验证它是否应该将post数据发送到你的控制器吗?在调试器中,使用Chromes调试器,函数似乎在$(“#submitsearch”)。单击(函数(e){当我调试此代码时,它会:$(“#submitsearch”)。单击(函数(e){然后进入一个名为BrowserLink的文件,其中它似乎卡在了一个循环中,一个代码示例:(i.log(“无效传输:+f+”,将其从传输列表中删除”)、t.splice(u,1));t.length==0&(i.log(“没有传输保留在指定的传输数组中”)、t=null)}否则如果(n.type(t)==“object”| r.transports[t]| t==“自动”){如果(t==“auto”&&r.\uu.ieversion)您可以使用浏览器检查控制台元素工具并与我分享您收到的错误。这不是一个错误,它只是卡在一个名为“BrowserLink”的文件中的一行代码的循环中。您可以向我发送指向您有问题的网站的链接吗。[{“name”:“companyname”,“value”:“Wetherby Consultants ltants”}{“名称”:“专业”、“价值”:“消费品和服务”},{“名称”:“类别”、“价值”:“通才”},{“名称”:“位置”、“价值”:“伦敦”}][HttpPost]公共字符串GetSearchDetails(字符串公司名称、字符串专业、字符串类别、字符串
function postToAjax() {
debugger;
var companyname = $('#phrases').val().toString();
var specialities = $('#specialities').val().toString();
var categorys = $('#categorys').val().toString();
var locations = $('#locations').val().toString();
var postData = $(this).serializeArray();
var form = $("#searchform");
$.ajax({
url: "Search/GetSearchDetails",
data: { 'companyname': companyname, 'specialities': specialities, 'categorys': categorys, 'locations':locations },
type: 'POST',
success: function (data) {
//Show popup
$("#popup").html(data);
}
});
}
</script>