我有 Home 和 Customer 控制器
家庭控制器
public ActionResult Index()
{
return view()
}
Index.cshtml
<div class="card" data-csid="jieg83ndks90">
</div>
当用户在div上方单击时,它将重定向到 CustomerController 上的 Customer.cshtml ,并且还必须获取div
data-csid
值(jieg83ndks90)
CustomerController
public ActionResult Customer()
{
return view()
}
注意:我想从 index.cshtml 重定向到 Customer.cshtml ,并将值(jieg83ndks90)也传递给 Customer.cshtml
答案 0 :(得分:2)
您要问几件事:
让我们从第一个点击事件开始。由于您开始使用ASP.NET MVC,因此我将假定jQuery包含在项目模板中。因此,点击事件可能看起来像这样:
$('div.card').on('click', function () {
});
这将在用户每次使用<div>
单击class="card"
时调用该函数(当前为空)。在该函数中,您希望获取已单击的<div>
的data- *属性的值:
$('div.card').on('click', function () {
let csid = $(this).data('csid');
});
现在,您要重定向到URL并包含该值。在ASP.NET MVC中有多种构建URL的方法,其中一些在JavaScript中使用时有一些有趣的解决方法。但是,让我们保持简单。使用Url.Action
帮助器,并记住它是一个字符串,因此请在JavaScript中用引号引起来:
$('div.card').on('click', function () {
let csid = $(this).data('csid');
let url = '@Url.Action("Customer", "Customer")';
});
(建议您在浏览器中查看页面源,以查看生成的内容。)并将值添加到生成的URL的查询字符串中:
$('div.card').on('click', function () {
let csid = $(this).data('csid');
let url = '@Url.Action("Customer", "Customer")' + '?csid=' + csid;
});
然后使用该网址访问redirect the user:
$('div.card').on('click', function () {
let csid = $(this).data('csid');
let url = '@Url.Action("Customer", "Customer")' + '?csid=' + csid;
window.location.href = url;
});
重要说明:差异似乎并不重要,但是了解正在发生的事情的语义非常重要。您不是将用户重定向到Customer.cshtml
。您正在将用户重定向到控制器上的 action方法。当该操作方法返回视图时,该 view 将为Customer.cshtml
。
当您要使用查询字符串上的值时,这一点很重要。由于用户要使用action方法,因此请在action方法中获取该值:
public ActionResult Customer(string csid)
{
return View();
}
现在,问题显然变成了……您打算用那个csid
值做什么。这几乎是您问题所在的地方。至此,您已经使用值重定向了用户,如何使用该值取决于您。如果要将其从控制器操作传递给视图,则标准方法是在传递给视图的模型上设置值。例如:
public ActionResult Customer(string csid)
{
var model = new SomeViewModel { CSID = csid };
return View(model);
}
然后在您的视图中,请将此行放在顶部以绑定到该模型:
@model SomeViewModel
从那里,您可以在视图中的任意位置访问Model.CSID
。