ASP.NET MVC通过AJAX调用将字符串传递给控制器

时间:2016-07-06 17:24:03

标签: c# asp.net ajax asp.net-mvc asp.net-mvc-4

我尝试在单独的视图中将字符串作为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的视图几乎没有任何内容,我只是尝试打印传递的字符串。

1 个答案:

答案 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);