我可以将Knockout ObservableArray作为参数传递给ASP.NET MVC Razor @ Url.Action

时间:2014-11-05 00:14:39

标签: asp.net-mvc knockout.js

我有一个淘汰的Observable,它在与我的页面进行一些交互时填充。该Observable是逗号分隔值(即“a,b,c”)。我现在需要的是将此作为参数传递给@ Url.Action。见下文:

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

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您需要将您的网址构建为查询字符串manualy

假设ids = ko.observable('a,b,c'); 那么你将建立你的网址

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

会生成类似http://localhost:5248/Employee/Benefits?ids=a,b,c

的网址

或试试这个

<button data-bind="click: function() { window.location.href='@(Url.Action("Benefits", "Employee"))' + '?ids=' + ids() }">
    Click me
</button>

JSFiddler DEMO

答案 1 :(得分:1)

您可以使用点击装订。

<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());
    };

或仅直接在链接上绑定属性

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

答案 2 :(得分:0)

您可以使用替换的实际值提前设置url,这有点hacky,但由于MVC代码在服务器上执行,因此任何MVC代码都需要至少往返服务器重装。

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

我考虑过写一个MVC动作,它会返回javascript,创建一个Url对象,该网站的路由可以像这样使用,但在我开始使用之前就开始使用其他方式。