2011-10-19 39 views
0

我需要路由信息为我的JavaScript逻辑在客户端上。我现在有一个可行的解决方案,但它感觉有点笨拙。我在页面上注入一个隐藏字段。我认为必须有更好的方法。这是我目前正在做的:客户端需要MVC路由信息?

<input type="hidden" id="rt" value="@string.Format("{0}://{1}{2}",Request.Url.Scheme,Request.Url.Authority,Url.Content("~"))"/> 

回答

1

是的,非常笨重。其实你不需要绝对的网址为你的JavaScript。它可以与相关网址合作。例如:

@Html.Hidden("rt", Url.Content("~/")) 

现在是否使用隐藏字段是好事还是坏事就是,虽然不知道你的情况,并正是你正在尝试在JavaScript做更多细节的话。但让我们考虑一个非常常见的情况。你想AJAX化一个表单。在这种情况下,你可以使用HTML佣工在视图中生成表格,然后:

$(function() { 
    $('#myform').submit(function() { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      success: function(result) { 
       // TODO: do something with the results 
      } 
     }); 
     return false; 
    }); 
}); 

查看如何,我们不再需要任何硬编码的网址或隐藏字段脱颖而出的JavaScript。

或者让我们考虑另一种情况。你想AJAX化一个锚点。一样。您可以使用Html.ActionLink生成你的锚,然后:

$(function() { 
    $('#mylink').click(function() { 
     $.get(this.href, function(result) { 
      // TODO: do something with the results 
     }); 
     return false; 
    }); 
}); 

或者另一种情形。你有一些div容器,你想在点击它的时候发送一个AJAX请求给一些控制器动作。在这种情况下,你可以使用HTML5数据 - *属性上的div:

<div id="mydiv" data-url="@Url.Action("Foo", "Home")">Some contents</div> 

然后:

$(function() { 
    $('#mydiv').click(function() { 
     $.get($(this).data('url'), function(result) { 
      // TODO: do something with the results 
     }); 
     return false; 
    }); 
}); 

OK,现在你看,你不再需要的隐藏字段。总有可能做得更好。

+0

感谢Darin的回复。尽管我试图消除隐藏的领域。在页面上注入隐藏字段是唯一的方法? – coding4fun

+0

@ user127954,不,你不需要隐藏字段。有更好的方法。这将取决于您在客户端尝试做什么。 –

+0

非常多我只是在我的JavaScript的基地网址使用它,所以当它改变我不必改变我的JavaScript(不想硬代码网址)。 – coding4fun