Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC和JQuery将信息获取到控制器_C#_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

C# ASP.NET MVC和JQuery将信息获取到控制器

C# ASP.NET MVC和JQuery将信息获取到控制器,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,我完全不知道如何使用jQuery来处理ajax,而且似乎我尝试得越多,我就越感到困惑。此时,我只想使用jqueryajax将数据获取到控制器。我的jQueryAjax调用的一些代码是 $(function() { $('#buttonAddLink').click(function() { var AjaxLink = { title: $("#linkTitle").val(), url: $("#linkUrl").va

我完全不知道如何使用jQuery来处理ajax,而且似乎我尝试得越多,我就越感到困惑。此时,我只想使用jqueryajax将数据获取到控制器。我的jQueryAjax调用的一些代码是

$(function() {
    $('#buttonAddLink').click(function() {
        var AjaxLink = {
            title: $("#linkTitle").val(),
            url: $("#linkUrl").val()
        };

        $.ajax({
            url: '/User/AddLink',
            type: 'POST',
            data: AjaxLink,
            dataType: 'json',
            success: function(result){
                $('.added').html(result.Result).show();
            }
         });         
    });    
});
这是我的控制器和我正在使用的操作。就我所知,从看几本教程来看,它“应该”是有效的,但显然我没有像我想的那样理解它

public ActionResult AddLink(string title, string url)
{
    return Json(new { Result = string.Format(title + " " + url)});
}

基本上,我所要做的就是调用Ajax并返回显示,以确保数据被发送到控制器。

这与构建请求的方式有关。JQuery调用将数据作为POST数据发送到用户控制器上的AddLink操作,这意味着在C#代码中,您将通过Request.Form对象访问它。根据您所要做的,您可以将jQuery URL构造为

/User/AddLink/{Title}/{URL}
这需要您在Global.ASAX文件中编写一条规则来处理此类输入。简言之,如果您只是按如下方式修改AddLink方法:

public ActionResult AddLink()
{
    return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])});
}

我相信你会得到你想要的回复。

你试过写出完整的URL吗?我在本地IIS上运行的项目也有同样的问题。完整url为,但在jQuery ajax调用中使用“/user/addlink”提交到(请注意,“myproject”丢失,因为据jQuery所知,它实际上不是基本url)。

您尝试过使用jQuery.post方法吗 应该是

jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus)
{
  if(textStatus=="success")
  {
    //do something with data which is the result from the call}
  }
  else
  {
  //failed somewhere along the line
  }
},"json");

post值被映射到MVC调用中的参数,因此foxxtrot的代码应该是不必要的。

使用诸如firebug之类的工具来确保您期望的url正在被调用

调试例程=>

  • 使用Firbug确定调用了正确的url,并且在post中发送了正确的数据
  • 在操作中中断调用,并确保正确填充参数
  • 再次使用Firebug检查响应
  • 如果您喜欢IE,也可以使用IE开发者工具栏代替Firebug。
    如果调用url和post数据似乎正确,并且没有调用该操作,则应检查路由规则。ie是否有任何默认值在这种情况下,MVC框架将寻找包含这些默认值的方法签名(您的url规则中是否有{id}?

    我还没有花时间测试它,但它看起来应该可以工作,我想确定的一点是,您装饰了控制器函数,让它知道它正在寻找一个如下所示的帖子:

    [HttpPost]
    public ActionResult AddLink()
    {
        return Json(new { Result = string.Format(Request.Form["title"] + " " +     Request.Form["url"])});
    }
    

    如果这些解决方案都不适合您,我今天下午应该有时间进行测试。

    好的,使用Ajax尝试以下代码,将数据传递给您的操作方法:

    jQuery.ajax({
                url: '@Url.Action("AddLink", "User")',
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({ title: title, url: url }),
                success: function (result) { }
            });
    

    所以我花了一点时间试图弄清楚如何从AJAX调用中获取数据。我将一个JSON对象从视图传递到控制器,然后在完成时返回对象的ID

    所以,我终于成功了,下面是我在视图上所做的:

    var obj = {
       property1 : '',
       property2 : ''
    };
    
    $.ajax({
        // Returns the full url
        url: '@Url.Action("Method", "Controller")', 
        // Sends as a json object, I actually have an object that maps to my ViewModel, this is just for explaining
        data: obj, 
        // You are telling that you are receiving a json object
        dataType: 'json', 
        success: function (id) {
           // do code here with id
        }
    })
    
    对于我的控制器,我返回了一个Json对象,并将AllowGet作为JsonRequestBehavior执行

    public ActionResult Method (ViewModel vm)
    {
        int id = ... (do something with the vm)
        return Json(id, JsonRequestBehavior.AllowGet);
    }
    
    编辑: 此外,您似乎将POST作为控制器的请求类型,并且您的控制器方法没有
    [HttpPost]
    注释。情况也可能如此

    我希望这有帮助

    干杯

    您可以使用Request.Form访问它,但是如果可以的话,ASP.NET MVC框架也会参数化表单值(尽管如果在url参数和表单中看到相同的值会有点混淆)。您是否使用firebug检查发送的数据?是否正在调用操作(这与路由问题有关)?您只需不断发布这段代码片段,作为您可以找到的每个mvc/ajax问题的答案。这实际上在这里没有帮助-1.