2

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

我如何使用 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”时刻,但对于我的一生,我无法弄清楚!

干杯...

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

4

2 回答 2

5

我认为您正在尝试以一种无法正常工作的方式混合客户端和服务器代码。:) <%= ... %> 块是纯服务器端代码,因此不能使用 JQuery 选择器。你可以用 T4MVC 做的最好的事情可能是这样的:

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

它仍然可以为您节省操作和控制器名称的文字字符串,但不会帮助您处理参数。

于 2010-10-25T20:42:24.140 回答
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
}
于 2010-10-25T20:44:13.663 回答