Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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
Javascript 从查询字符串获取参数_Javascript_Jquery_Asp.net_Asp.net Mvc_Knockout.js - Fatal编程技术网

Javascript 从查询字符串获取参数

Javascript 从查询字符串获取参数,javascript,jquery,asp.net,asp.net-mvc,knockout.js,Javascript,Jquery,Asp.net,Asp.net Mvc,Knockout.js,我正在使用ASP.NETWebAPI、MVC和Knockout创建一个网页 我有一个普通的MVC控制器,可以在需要时加载页面: [Authorize] public class AdminController : Controller { public ActionResult Clients() { return View(); } public ActionResult ClientE

我正在使用ASP.NETWebAPI、MVC和Knockout创建一个网页

我有一个普通的MVC控制器,可以在需要时加载页面:

 [Authorize]
    public class AdminController : Controller
    {
        public ActionResult Clients()
        {
            return View();
        }

        public ActionResult ClientEdit(int? Id)
        {
            return View();
        }
    }
一旦页面被加载,我的淘汰模型就会负责数据的加载。因此,“客户机”控制器只是加载所有客户机的列表。在该屏幕上,用户可以单击客户端旁边的“编辑”,页面被导航到带有id的“ClientEdit”控制器

因此,我的击出点击事件在我的击出视图模型中如下所示:

self.EditClick = function () {
        if (this.ClientId && typeof this.ClientId !== 'undefined') {
            window.location.href = "/Admin/ClientEdit/" + this.ClientId;
        }
        else
            window.location.href = "/Admin/ClientEdit/";
    }
(它处理“新建”按钮和编辑按钮,因此是“如果”)

一旦我重定向,MVC控制器将加载页面,URL为:

然后我加载敲除模型,并希望进行API调用以获取数据

加载页面后,我想将视图模型绑定到页面。这是我目前的视图模型:

function AdminClientEditor() {
    var self = this;

    self.Name = ko.observable("");
    self.ContactName = ko.observable("");

ko.applyBindings(new AdminClientEditor(), $("#clienteditor")[0]);
因此,我将创建一个$.get方法,该方法调用一个webAPI方法,该方法将根据id返回数据。我只需要以某种方式获取id

但是,如何从URL获取Id(在本例中为“1”?
而且,这是实现我想要做的事情的正确方法吗?

您可以通过viewbag将id值传递给view

public ActionResult ClientEdit(int? Id)
{
     ViewBag.ClientId=id;
     return View();
}
以及在视图的脚本部分

var clientId="@ViewBag.ClientId";
alert(clientId);
// use this
如果访问此id值的javascript代码位于单独的外部js文件中,则可以在视图中将此值设置为js变量,并在js文件中访问它。请确保使用名称空间来避免全局变量覆盖值问题

所以在你看来

<script>
    var myApp = myApp || {};  
    myApp.ClientId= "@ViewBag.ClientId";
</script>
<script src="~/Scripts/PageSpecificExternalJsFile.js"></script>

我不确定这是否是最好的方法,但您可以使用JS从URL获取ID:

var id = GetID();

function GetID() {
  var href = location.href;
  var results = href.split("/");
  return results[results.length - 1];
}

我想出了一个有效的解决方案,但我不确定这是否是最好的方法。它看起来相当不错

我在应用程序代码中创建了一个名为“GenericParameterModel”的MVC ViewModel类,目前它只有一个参数“Id”

然后,我修改了页面加载MVC方法:

public ActionResult ClientEdit(int? Id)
{
     var mv = new GenericParameteModel { Id = Id };
     return View(mv);
}
在我的视图页面上,我将模型
'genericparametermodel'
添加到视图中

我在视图中创建了一个名为
'ClientId'
的隐藏字段

<input type="hidden" id="clientId" value="@model.Id">

然后,在我的knockout视图模型中,我检查$(“#clientId”).val()是否有值。如果有,我使用该值执行$.get调用,并填充我的视图模型

通过这样做,我从MVC加载的所有初始页面将能够为您创建GenericParameterModel,它将成为其他页面的模式。由于它是一个模型,我可以根据应用程序的需要添加新字段


这似乎很好。我不确定这是否是一种可接受的方式,因为我是新手(MVC加载视图,敲除/WebApi加载后获取数据)。但它看起来整洁且易于管理。

这只是提醒“@ViewBag.ClientId”它在razor视图中吗?它在javascript knockout viewmodel中。我用该视图模型编辑了文章。代码需要放在那里。当我尝试您的示例时,它只是提醒代码,而不是获取id。
<input type="hidden" id="clientId" value="@model.Id">