【问题标题】:How to pass 3 parameters to the controller如何将3个参数传递给控制器
【发布时间】:2015-05-07 01:30:27
【问题描述】:

这是我的控制器,需要日期:

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} 中看不到数字。数字是红色的

【问题讨论】:

  • 您不能将 javascript 变量传递给 asp 代码...它们在不同的环境和不同的时间运行。该 asp 代码早在浏览器看到它之前就在服务器上运行
  • 您希望出现什么值而不是 datepicker 和 number?在您当前的代码中,这些将在从服务器处理页面时生成,并且不会保存 JavaScript 变量的详细信息。

标签: jquery asp.net-mvc


【解决方案1】:

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

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

例如

 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;
});

【讨论】:

  • 点击什么也没发生((((
  • 调试它需要做什么? :) 用 alert() 代替 window.location.href 并确认 URL 有效。
  • 未捕获的 ReferenceError:未定义日期选择器。 datepicker - 它是一个日期(字符串)
  • @{var datepicker = Convert.ToString(ViewBag.DatePicker);}
  • @andrey1567: datepicker 不在最初的问题中,所以我假设你会自己更新。能否提供问题中的完整代码?
【解决方案2】:

您的问题似乎是您试图在 razot Html 帮助器参数中使用 javascript 变量。

您不能这样做,因为 razor 语法是在服务器上执行的,而 javascript 是在客户端执行的。

请看this回答

【讨论】:

    【解决方案3】:

    首先,你有一个语法错误:

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

    秒(正如 cmets 指出的那样)您不能在 @Html 方法(服务器端)中使用 javascript 变量(客户端/浏览器端)。 我用来解决此问题的一个技巧是在 @Html.Action 中使用占位符,例如 new {date="###THEDATE###", number="###THENUMBER###"} 和相应的字符串@Html 在客户端返回(并发送到浏览器并停留在 javascript 变量中)占位符使用字符串替换函数替换为 javascript。

    【讨论】:

    • 那是服务器端。从外观上看,此解决方案需要客户端值。
    猜你喜欢
    • 2018-05-01
    • 2010-11-10
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多