jquery / view中的T4MVC url.action

时间:2010-10-25 19:53:52

标签: asp.net-mvc t4mvc

这可能是也可能是不可能的(并且很可能在文档中,但我只是错过了它。)

如何在我的视图中使用T4MVC构建Url.Action(),这将允许我使用jQuery选择器。我一直在尝试以下(在我的javascript中)没有成功:

function cancelHoldBooking() {
    var url = '<%= Url.Action(MVC.FundProperty.CancelLock($("#propertyid").val())) %>';
    // other code omitted for brevity
}

我能够成功完成以下任务:

function cancelHoldBooking() {
    var url = '<%= Url.Action("CancelLock", "FundProperty") %>';
    url += "?id=" + $("#propertyid").val();
    // other code omitted for brevity - in this case   
    // **I could of course have used the**:
    // var params = {id: $('#propertyid').val()};
    // **object**
}

我知道当答案到来时,这将是一个'doh'时刻,但对于我的生活,我无法理解这一点!!

...欢呼声

[edit] - 我想补充一点,如果我省略MVC.FundProperty.CancelLock()id参数并试图通过$ ajax调用发送params对象,那么编译器会抱怨调用中缺少的参数。因此,我不能通过在CancelLock()调用中调用$ ajax params对象而没有参数来绕过javascript mish-mash。令人沮丧的:(

2 个答案:

答案 0 :(得分:5)

我认为你试图以一种无法正常工作的方式混合客户端和服务器代码。 :)&lt;%= ...%&gt; block是纯服务器端代码,因此它不能使用JQuery选择器。使用T4MVC可以做的最好的事情可能是:

function cancelHoldBooking() {
    var url = '<%= Url.Action(MVC.FundProperty.CancelLock()) %>';
    url += "?id=" + $("#propertyid").val();
}

它仍然可以保存您的操作和控制器名称的文字字符串,但不会帮助您使用该参数。

答案 1 :(得分:3)

您必须意识到,当调用函数<%= ... %>时,在客户端上运行$("#propertyid").val()时,服务器上会处理cancelHoldBooking

解决问题的一种方法是:

function cancelHoldBooking() {
    var url = '<%= Url.Action(MVC.FundProperty.CancelLock(999)) %>'; // Provide a magic number
    url += url.replace('999', $("#propertyid").val());  // Replace the magic number
    // other code omitted for brevity - in this case i could 
    // of course have used the params {id: $('#propertyid').val()} object
}