为什么我在ajax asp.net mvc中调用时在控制器中得到null?

时间:2016-10-29 05:52:22

标签: jquery asp.net-mvc

为了这个目的,我想在ajax中使用asp.net mvc调用控制器,在视图页面中编写此代码:

$("#dbbutton").click(function (e) {

            //Save DB NAME
            var serviceURL = '/DDRS/SaveDBName';
            $.ajax({
                type: "POST",
                url: serviceURL,
                data: JSON.stringify({ value:$("#DBName").val() }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: successFunc,
                error: errorFunc
            });
            function successFunc(data, status) {
                alert(data);
            }
            function errorFunc() {
                alert('error');
            }


这是我在DDRS控制器中的动作方法:

[HttpPost]
        public ActionResult SaveDBName(string DataBaseName)
        {
            string test = DataBaseName.Trim();
            string sep = test.Substring(0, test.IndexOf(","));

            return Json(test, JsonRequestBehavior.AllowGet);
        }


但是我在SaveDBName这行中得到了空错误:

string test = DataBaseName.Trim();


会发生什么?我该如何解决这个问题?谢谢。

1 个答案:

答案 0 :(得分:0)

您遇到此问题是因为您没有以ASP.Net MVC期望的格式发送数据。当ASP.Net MVC直接用作POST方法的参数时,在处理string和值类型(int,bool等)参数时需要一些特殊的格式。

您的控制器使用原始类型,但您只是发送

data: JSON.stringify({ value:$("#DBName").val() })

value不是您参数的名称,因此它不会将其绑定到您的DataBaseName参数。即使用正确的参数名替换value,它也不起作用。

要使其工作,您必须使用以下代码作为jQuery ajax请求中的数据:

data: { "": $("#DBName").val() }

请注意,属性名称为空,这将告诉jQuery以此格式发送数据

='MyDatabaseNameWillGoHere'

使用该格式,ASP.Net MVC可以正确地将其绑定到您的参数。

要防止该问题,请始终使用ViewModel。