javascript - 如何从查询参数填充可观察值?

标签 javascript jquery asp.net asp.net-mvc knockout.js

我正在编写 ASP.NET/MVC 应用程序。我需要用通过 URL 传递的值填充 Knockout 可观察值。比方说,我想打开以下页面:

http://example.com/Controller/Action?param=test

我想把通过URL参数传递的值放入输入:

<input data-bind="value: field, <?>"></input> <!-- Either set value to "test" here -->

this.field = ko.observable(<?>) <!-- or here -->

解决方案1

由于我可以完全控制生成 HTML,因此我可以创建隐藏字段,用值填充它,然后使用 jQuery 来实现可观察,但这对我来说似乎有点过分了。

<input type="hidden" id="temp" value="@Model.Param"></input>

field($("#temp").val());

解决方案2

另一种选择是使用 Razor 生成一些 Javascript:

<script type="text/javascript" src="pageViewModel.js"></script>
<script type="text/javascript">
    pageViewModel.setValue(@Model.Param); // Dangerous
</script>

但这很危险 - 我会应用一些安全措施来避免人们在这里注入(inject) Javascript。

有更好的方法吗?

最佳答案

您可以通过检查 window.location.search How to obtaining the querystring from the current URL with JavaScript? 在您的 knockout View 模型中直接通过 javascript 访问查询字符串。

var searchParams = new URLSearchParams(window.location.search);
this.field = ko.observable(searchParams.get("param"));

(如果不支持 URLSearchParams,链接的 SO 答案还提供了旧版浏览器支持的解决方案)

关于javascript - 如何从查询参数填充可观察值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350110/

相关文章:

javascript - 动态创建的 iframe 的 onload 事件永远不会在 IE 中触发

javascript - php变量从jquery变量获取值而不发送到数据库

javascript - 我可以调用 $(document).ready() 来重新激活所有加载事件处理程序吗?

javascript - 包括 JQuery 库

c# - 通过sqlquery C#检查数据库中的空值

javascript - 使用包含空格的字符串值向下拉列表添加选项会导致语法错误

javascript - for 循环中的 jQuery .append()

关于排序功能的 Javascript 语法帮助

jquery - 如何使这个 JQuery 工作

c# - ASP 单选按钮 oncheckedchange 未触发