在剃刀中嵌入javascript

时间:2017-10-23 13:01:06

标签: javascript razor

有没有办法做类似的事情:

<input type="text" id="ZIP" name="ZIP" />
<a href=@Url.Action("VerifyZIP","Controller",new{ZIP = document.getElementById('ZIP').value})>Send To Controller</a>

基本上我想要做的是使用<a>标签将ZIP输入中的值发送到我的控制器。

注意:我知道上面的代码不起作用,但我想知道是否可以在Razor中嵌入JavaScript。

2 个答案:

答案 0 :(得分:1)

您无法将JavaScript(客户端)变量传递给Url.Action,因为它是在服务器端处理的。

作为解决方法,您可以使用占位符来生成网址。然后使用.replace()方法生成实际网址。

HTML

<a href="#" onclick="redirect(this, event)" data-url='@Url.Action("GetAnn", "Home", new { CEP = "__PLACEHOLDER__"})'>Send To Controller</a>

JavaScript

<script>
    function redirect(elem, event) {
        event.preventDefault();
        window.location.href = elem.dataset.url.replace("__PLACEHOLDER__", document.getElementById('ZIP').value);
    }
</script>

答案 1 :(得分:0)

很有可能在Razor中嵌入JavaScript,是的,您也可以使用Model对象中的值来生成JavaScript,例如:

var foo = {someValue: '@Model.SomeValue,', someOtherValue: '@Model.SomeOtherValue'};

但是,有几种方法可以实现您想要做的事情。您可以使用Html.BeginForm创建表单,并将提交按钮设置为链接样式。那你就不需要任何JavaScript了。或者,您可以使用JQuery将函数附加到链接的click事件:

<input type="text" id="ZIP" name="ZIP" />
<a href=@Url.Action("VerifyZIP","Controller",new{ @id = "my-link")>Send To Controller</a>

<script>
    $('#my-link').click(function () {
        var url = '@Url.Action("VerifyZIP","Controller")';
        var zipValue = $('#ZIP).val(); 
        var params = { zipValue };
        $.get(url, params, function(response) {
            // do something with response
        );
    });
</script>

当然,如果你愿意的话,你可以将上面的内联函数作为onClick属性。

这在很大程度上取决于你想要做什么。对我来说,似乎你只需要一个表格。