为了这个目的,我想在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();
会发生什么?我该如何解决这个问题?谢谢。
答案 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。