我尝试在单独的视图中将字符串作为AJAX调用的URL中的控制器的参数传递。我希望它具有与在控制器中传递(int?id)时相同的可空功能,而是一个字符串。这是我的代码:
单独观点:
$.ajax({
url: "Save/"+string
}).done(function (data) {
$('body').append('<p>Query was successfully saved to the database.</p>');
});
控制器:
public ActionResult Save(string? data)
{
if(data == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
return View(data);
}
并且Save
的视图几乎没有任何内容,我只是尝试打印传递的字符串。
答案 0 :(得分:3)
首先,string
是一个类,所以它不能为空,即在参数类型声明后你不需要?
:
public ActionResult Save(string data)
现在,要访问此方法,您需要正确的网址。你没有写控制器的名字,所以我认为它是SomeController
。另外,我假设您使用默认MVC路由,即没有自定义路由。如果这些假设有效,则您需要的URL是:
url: "/some/save/?data=yourvalue"
让我们分解一下:
some
代表您的控制器名称,没有单词Controller
,因此SomeController
在网址中变为some
。save
是您方法的名称。data
是方法中参数的名称。默认路由将参数id
作为URL的第三段,但您的参数名为data
,因此您需要将其作为查询字符串传递。yourvalue
是将传递给方法的值。更新:评论中提到的另一个问题是该声明
return View(data);
正在寻找参数值中提供的视图。这是预期的行为,因为具有类型View
的单个参数的方法string
的重载正在尝试呈现视图,该视图作为参数传递。
要解决此问题,您应该使用带有2个参数的重载,并将视图的名称作为第一个参数传递,将模型作为第二个参数传递:
return View("Save", data);