Asp.net mvc 我可以将一个淘汰的ObservalArray作为参数传递给ASP.NET MVC Razor@Url.Action吗

Asp.net mvc 我可以将一个淘汰的ObservalArray作为参数传递给ASP.NET MVC Razor@Url.Action吗,asp.net-mvc,knockout.js,Asp.net Mvc,Knockout.js,我有一个敲除观察,它是在与我的页面交互期间填充的。此可观察值是逗号分隔的值(即“a、b、c”)。我现在需要的是将其作为参数传递给@Url.Action。见下文: <input type="button" onclick="window.location.href='@Url.Action("Benefits", "Employee", new { ids = "a,b,c" })';" /> 我该怎么做呢?您可以提前设置url,用实际值替换url,这有点麻烦,但由于MVC代码是

我有一个敲除观察,它是在与我的页面交互期间填充的。此可观察值是逗号分隔的值(即“a、b、c”)。我现在需要的是将其作为参数传递给@Url.Action。见下文:

<input type="button" onclick="window.location.href='@Url.Action("Benefits", "Employee", new { ids = "a,b,c" })';" />


我该怎么做呢?

您可以提前设置url,用实际值替换url,这有点麻烦,但由于MVC代码是在服务器上执行的,因此任何MVC代码都至少需要往返服务器才能重新加载某些内容

urls = {
  EmployeeBenefits: '@Url.Action("Benefits", "Employee", new {ids="==ids=="})'
};
window.location.href = urls.EmployeeBenefits.replace('==ids==', "a,b,c");

我考虑编写一个MVC操作,返回javascript,创建一个带有站点路径的
Url
对象,该对象可以像这样使用,但在我开始使用之前,就开始使用其他方法了。

您需要手动将Url构建为查询字符串

假设
ids=ko.observable('a,b,c')
然后您将构建您的url

<input type="button" onclick="window.location.href='@(Url.Action("Benefits", "Employee"))' + '?ids=' + $data.ids()" />

您可以使用单击绑定

<button data-bind="click: function () { myFunction('@Url.Action("Benefits", "Employee")'); }">
    Click me
</button>

//then in your view model:
self.myFunction = function (actionURL) {
        window.location.href = (actionURL + '?ids=' + this.ids());
    };

点击我
//然后在视图模型中:
self.myFunction=函数(actionURL){
window.location.href=(actionURL+'?ids='+this.ids());
};
或者直接在链接上绑定属性

<a data-bind="attr: { 'href': '@Url.Action("Benefits", "Employee")?ids=' + ids() }">
    Click
</a>


我尝试了这个,但是我无法访问ids()-我已经创建了一个测试可观察的ids-但是当单击时链接甚至不会到达该位置。ids()必须在相同的范围内。您是否尝试使用
$data.ids()
$parent.ids()
$root.ids()
请尝试放置更多代码,ids()我添加了示例,因为示例位于最上面,所以根据您的代码,我将其更改为$root.ids()。还尝试了$root.ids,但仍然没有成功。请尝试绑定到单击事件
单击我
,而不是检查答案
<a data-bind="attr: { 'href': '@Url.Action("Benefits", "Employee")?ids=' + ids() }">
    Click
</a>