如何将3个参数传递给控制器

时间:2015-05-06 16:04:08

标签: jquery asp.net-mvc

这是我的控制器,它取日期:

public ActionResult ViewLevel(string datepicker)
        {
            @ViewBag.DatePicker = datepicker;
            return View();
        }

我有查看:

@model Car

@{
    var datepicker = Convert.ToString(ViewBag.DatePicker);
}
<div class = "Conteiner"
@foreach (Car car in Model)
        {
<p data-carnumber="@car.Number"> @car.Number<p>
<button class="buyCar">Buy</button>
}
</div>

<script type="text/javascript">
    $('.Conteiner').on("click", ".buyCar", function () {
        var number = $(this).data("carnumber");
        window.location.href = '@Html.Raw(Url.Action("Form", "Buy", new {datepicker,number}))';
    });
</script>

datepicker我也需要通过。为什么看不到new {datepicker,number}中的数字.number为红色

3 个答案:

答案 0 :(得分:1)

这是我讨厌看到Razor注入Javascript的一个原因。它混淆了整个客户端/服务器的分离(并且它不允许脚本位于单独的JS文件中,调试JS实际上可以在Visual Studio中工作!)。

您需要使用所选值在客户端运行时构造URL的参数部分:

e.g。

 var staticUrl = "@Html.Raw(Url.Action("Form", "Buy", new { datepicker=datepicker}))"
 $('.Conteiner').on("click", ".buyCar", function () {
      var number = $(this).prev().data("carnumber");
    window.location.href = staticUrl + "&number=" + number;
});

在这里,我只注入 操作URL的主要部分,并保留在点击时添加的参数。

通常我只将站​​点根URL注入到布局文件中的类似于此的全局变量中:

<script>
    window.siteRoot = @Url.Content("~/");
</script>

并在我的JS / jQuery中使用该URL,只需要站点根目录。

 $('.Conteiner').on("click", ".buyCar", function () {
      var number = $(this).prev().data("carnumber");
    window.location.href = siteRoot + "buy/form?datapicker=" + datepicker + "&number=" + number;
});

答案 1 :(得分:0)

首先,您遇到语法错误:

正确是新的{parametername1 = value1,parametername2 = value2}。

秒(如评论所指出的)你不能在@Html方法(服务器端)中使用javascript变量(客户端/浏览器端)。 我用来解决这个问题的一个技巧是在@Html.Action中使用占位符,如new {date =&#34; ### THEDATE ###&#34;,number =&#34; ### THENUMBER# ##&#34;}并且在客户端使用@Html返回的相应字符串(并将其发送到浏览器并在javascript变量中休息),使用字符串替换函数将占位符替换为javascript。

答案 2 :(得分:0)

看起来你的问题是你试图在razot Html帮助器参数中使用javascript变量。

你不能这样做,因为剃刀语法在服务器上执行,javascript在客户端执行。

请参阅this回答