C# 如何使用URL将数据从javascript发送到ASP.NET MVC控制器

C# 如何使用URL将数据从javascript发送到ASP.NET MVC控制器,c#,javascript,asp.net,knockout.js,C#,Javascript,Asp.net,Knockout.js,我需要一些帮助。我使用ASP.NETMVC4和JavaScript以及Knockout编写了一个小应用程序,我无法将数据从JavaScript发送到MVC控制器,反之亦然。例如,JS的部分如下所示: JavaScript self.Employer=ko.observable(); self.aboutTemployer=函数(id){ $.ajax({ Url.Action(“GetEmployer”、“Home”) cache:false, 键入:“GET”, 数据:“{id:+id+”}”

我需要一些帮助。我使用ASP.NETMVC4和JavaScript以及Knockout编写了一个小应用程序,我无法将数据从JavaScript发送到MVC控制器,反之亦然。例如,JS的部分如下所示:

JavaScript
self.Employer=ko.observable();
self.aboutTemployer=函数(id){
$.ajax({
Url.Action(“GetEmployer”、“Home”)
cache:false,
键入:“GET”,
数据:“{id:+id+”}”,
contentType:'application/json;charset=utf-8',
数据类型:“json”,
成功:功能(数据){
自雇人员(数据);
}
}).失败(
函数(){
警报(“失败”);
});
};
在ASP.NET MVC Home Controller中,我通过ID获取雇主,并将其作为Json返回:

C#
public JsonResult GetEmployer(int-id)
{
var employer=unit.Repository().GetByID(id);
返回Json(雇主,JsonRequestBehavior.AllowGet);
}
我的视图返回另一个控制器(主视图/击出视图)。“我的视图”还将获得另一个对象,根据接收对象的不同,具有不同的外观:

HTML
。。。
关于公司:
一切都很好,我收到了JS中的空缺和雇主对象,并使用敲除在HTML中显示,但我的URL始终不变但当我得到职位空缺或雇主时,我想随时更改URL。 例如,如果我想得到雇主,使用方法GetEmployer,URL应该是这样的:~/Home/GetEmployer?id=3 如果我更改此代码字符串
Url.Action(“GetEmployer”、“Home”)
位于
Url:window.location.href=“/Home/GetEmployer?id=“+id
Url”将被更改,但控制器会返回一个Json对象并以Json格式在窗口中显示它。 请帮助我更改URL并从URL获取控制器中的信息。
谢谢。

由于MVC在处理同一视图的路由时有点烦人,我成功地做到了这一点:

self.Employer = ko.observable();
self.AboutEmployer = function (id) {
            $.ajax({                    
                    url: "@Url.Action("GetEmployer", "Home", new { id = "PLACEHOLDER"})".replace("PLACEHOLDER", id),
                    cache: false,
                    type: 'GET',
                    contentType: 'application/json; charset=utf-8',
                    dataType: "json",
                    success: function (data) {
                        self.Employer(data);
                    }
                }).fail(
                function () {
                    alert("Fail");
                });
         };

您可以使用标准的
url:@url.Action(“GetEmployer”,“Home”)/“+id
,但在刷新时,具有现有id的路由将保留在后续调用中,因此它开始附加id,这显然不起作用。通过在调用中指定ID,该行为将不再存在。

使用如下数据参数
{ID:ID,otherPara:otherParaValue}

 $.ajax({                    
     url:Url.Action("GetEmployer", "Home")
     type: 'GET',
     data: {id:id},
     contentType: 'application/json; charset=utf-8',
     dataType: "json",
     success: function (data) {
         alert(data)
     }
 });

试试下面的代码,希望对你有帮助

此代码在%100工作,请根据您的场景更改下面的文本框

HTML

控制器:

public JsonResult GetEmployer(string UserName)
{
    var employer = unit.Repository<Employer>().GetByID(id);
    return Json(employer, JsonRequestBehavior.AllowGet);
}
public JsonResult GetEmployer(字符串用户名)
{
var employer=unit.Repository().GetByID(id);
返回Json(雇主,JsonRequestBehavior.AllowGet);
}

根据我的观点,最好的导航方式是使用sammy.js。这是一篇关于这方面的帖子,这是我的控制器操作

[HttpPost]
    public ActionResult ActionName(string x, string y)
    {
        //do whatever
        //return sth :)

    }
我的帖子就在这里

<script type="text/javascript">
        function BayiyeCariEkle(){

           var sth= $(#itemID).text();

           var sth2= $(#itemID2).text();

           $.post("/ControllerName/ActionName", { x: sth, y: sth2});

         }
</script>

函数bayiyecarikle(){
var sth=$(#itemID).text();
var sth2=$(#itemID2).text();
$.post(“/ControllerName/ActionName”,{x:sth,y:sth2});
}

发布JSON时必须小心。您的
数据
不是有效的JSON,因为它缺少属性名称周围的引号。获取JSON字符串的最简单方法是在常规javascript对象上使用
JSON.stringify
,而不是自己构建字符串。(请确保您使用的是一个合理的最新浏览器(IE8+或真正的浏览器),或者使用一个类似于IE7的库)如何指定它是json类型?我只在这里发送字符串-“stringified”或“serialized”JSON对象,我使用JSON.org JSONstring=JSON.stringify(条目)提供的JSON插件对其进行序列化;我有类似的问题。我正在看这段代码,但不太了解ASP端发生的所有事情。你能解释一下吗?
[HttpPost]
    public ActionResult ActionName(string x, string y)
    {
        //do whatever
        //return sth :)

    }
<script type="text/javascript">
        function BayiyeCariEkle(){

           var sth= $(#itemID).text();

           var sth2= $(#itemID2).text();

           $.post("/ControllerName/ActionName", { x: sth, y: sth2});

         }
</script>