C# 通过Ajax发布到MVC控制器

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

您好,我目前正在尝试获取一个表单,以便使用AJAX发布控制器。但是,到目前为止,我没有运气,我一直在尝试获取表单,以便在提交表单时将表单中的值提交给控制器,但这不起作用。有人知道为什么吗

CSHTML:

@{
    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>