这是我的控制器,它取日期:
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为红色
答案 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)